演化架构和紧急设计: 利用可重用代码,第 1 部分:代码与设计之间的关系
2010-05-13 00:00:00 来源:WEB开发网这看上去可以作为不错的惯用模式积累起来。积累惯用模式的第一种途径是使用 “原生” 语言(即 Java),如 清单 2 所示:
清单 2. 重构惯用的 “工作单元” 模式
public void wrapInTransaction(Command c) {
setupDataInfrastructure();
try {
c.execute();
completeTransaction();
} catch (RuntimeException ex) {
rollbackTransaction();
throw ex;
} finally {
cleanUp();
}
}
public void addOrderFrom(final ShoppingCart cart, final String userName,
final Order order) throws SQLException {
wrapInTransaction(new Command() {
public void execute() {
add(order, userKeyBasedOn(userName));
addLineItemsFrom(cart, order.getOrderKey());
}
});
}
以框架作为模式集合
如果您熟悉 Hibernate,那么您将注意到,wrapInTransaction() 方法很像 Hibernate 的 doInTransaction helper。最成功的框架包含的是一组符合实际的技术惯用模式。框架中模式的有用性密切关系到框架如何得以生存。如果框架是从实用代码中提取的,那么其中的模式更多地关注现实中的问题。良好的框架(例如 Hibernate、Spring 和 Ruby on Rails)大多经历了实际应用的严峻考验。
另一方面,如果一个框架是在象牙塔中创建的,很多模式听起来很好,但是在实际项目中却没那么有用。我常提到的一个揣测性框架开发的例子是 JavaServer Faces(JSF)的定制呈现管道 “特性”。它允许输出各种类型的输出格式(例如 HTML、XHTML 和 WML)。我还没遇到过需要这个特性的开发人员(虽然我相信存在这样的开发人员),但是您在编写的每个 JSF 应用程序中都为此付出了一点代价。(它增加了理解事件模型和管道的复杂性。)
更多精彩
赞助商链接