演化架构与紧急设计: 对设计进行重构
2009-11-05 00:00:00 来源:WEB开发网核心提示: 图 1. 使用 Struts ActionForm 类黄色的方框包含了您的域类,但是 Struts 框架鼓励您扩展 ActionForm 获得有用的行为,演化架构与紧急设计: 对设计进行重构(3),然而,您现在必须将代码与 Struts 框架耦合,您应当抵制这种诱惑,如果框架掩盖住了所有内容,除
图 1. 使用 Struts ActionForm 类
黄色的方框包含了您的域类,但是 Struts 框架鼓励您扩展 ActionForm 获得有用的行为。然而,您现在必须将代码与 Struts 框架耦合。除了 Struts 应用程序外,您不能在其他任何位置使用域类。这还不利于域类的设计,因为这个实用类现在必须位于对象层次结构的顶层,不允许您使用继承来整合常见行为。
图 2 展示了一种更好的方法:
图 2. 改进后的设计,使用复合解除与 Struts 的耦合
采用这种方法,您的域类对 Struts ActionForm 不存在任何依赖关系。相反,一个接口为您的域类和 ScheduleItemForm 类定义了语义,后者充当域类与框架之间的一个桥梁。ScheduleItemImpl 和 ScheduleItemForm 都实现了这个接口,而 ScheduleItemForm 类通过复合(而不是继承)获得了对域类的引用。允许 Struts helper 维护对您的类的依赖关系,但是反过来并不成立:您不应该让类对框架存在依赖关系。现在,您可以在其他类型的应用程序中随意使用 ScheduleItem(比如 Swing 应用程序和服务层等)。
与基础设施建立耦合非常简单,并且对于许多应用程序来说也很普遍。当您导入了框架的优点时,框架可以极大地简化对服务的利用。您应当抵制这种诱惑。如果框架掩盖住了所有内容,那么就更加难以发现代码中的惯用模式(早期文章中定义为应用程序中出现的 little 模式)。
更多精彩
赞助商链接