演化架构与紧急设计: 对设计进行重构
2009-11-05 00:00:00 来源:WEB开发网如何实现可以进行重大重构的代码库?一个办法就是不要编写任何代码,直到您将测试添加到整个项目中。当您提出这个建议后,您将被解雇,然后您可以去另一家重视单元测试的公司工作。这种方法可能不是很好。另一个好方法是让团队的其他成员认识到测试的价值并开始缓慢地围绕代码的最关键部分添加测试。做好规划并在近期内宣布一个日期:“从下周四启动,我们的代码覆盖率将不断增长”。每次编写新代码时,添加一个测试,每次修复一个 bug 时,编写一个测试。通过围绕最敏感的代码部分(新特性和容易出现 bug 的部分)逐步添加测试,那么测试就可以发挥最大的作用。
单元测试检验原子性行为。但是,如果您的代码库没有坚持组合方法的思想,该怎么办?换句话说,如果您的所有方法都具有几十或几百行代码,并且每个方法执行大量的任务,那么应该怎么做?您可以使用单元测试框架来围绕这些方法编写粗粒度功能测试,主要关注方法的输入和输出状态的转换。这种方法不如单元测试,因为不能对行为进行彻底的检验,但是总比不采取任何措施要好。对于代码中真正关键的部分,可能需要在进行重构之前添加一些功能测试作为一种安全保障。
重构机制非常简单,并且所有主要 IDE 目前都提供了出色的重构支持。比较困难的地方在于确定对哪些内容 进行重构。这就是本文其余部分要解决的问题。
与基础设施耦合
Java 世界的所有开发人员都使用框架来启动开发并提供最好的关键基础设施(不需要您编写的基础设施)。但是框架(包括商业的和开源的)所隐含的一个危险就是:它们总是试图让您与其进行紧密耦合,这使得发现代码中隐藏的设计变得更加困难。
框架和应用服务器都提供了 helper 类,诱使您实施一种更加简单的开发:如果您仅仅是导入和使用它们的某些类,那么完成特定的任务将变得非常容易。一个典型的例子就是 Struts,这是一种非常流行的开源 Web 框架。Struts 包括了一组 helper 类来帮助您处理常见问题。例如,如果允许您的域类扩展 Struts ActionForm 类,那么 Struts 将自动从请求中填充表单字段,处理验证和生命周期事件,并执行其他比较简单的行为。换而言之,Struts 提供了某种权衡:使用我们的类将使您的开发工作变得非常轻松。它鼓励您创建一种类似于图 1 所示的结构:
更多精彩
赞助商链接