演化架构与紧急设计: 组合方法和 SLAP
2009-11-05 00:00:00 来源:WEB开发网现在,方法的可读性好多了。它的主体符合组合方法的目标:看起来像是执行的步骤的大纲。方法现在处于高层,甚至非技术用户差不多也能够理解方法的作用。如果仔细看看 completeTransaction() 方法,会发现它只有一行代码。难道不能把这一行代码放回 addOrder() 方法中吗?不行,这会损害代码的可读性和抽象层。从高层的订单业务工作流跳到事务的细节是违反 SLAP 原则的。建立 completeTransaction() 方法能够使代码更概念化,避免具体的细节。如果以后要改变访问数据库的方式,只需修改 completeTransaction() 方法的内容,而不必修改调用代码。
SLAP 原则的目标是使代码更容易阅读和理解。但是,它也有助于发现代码中存在的惯用模式。注意,在用事务块保护更新方面有一个惯用模式。可以进一步重构 addOrder() 方法,见清单 8:
清单 8. 事务性访问模式public void wrapInTransaction(Command c) throws SQLException {
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() throws SQLException{
add(order, userKeyBasedOn(userName));
addLineItemsFrom(cart, order.getOrderKey());
}
});
}
更多精彩
赞助商链接