演化架构和紧急设计: 利用可重用代码,第 1 部分:代码与设计之间的关系
2010-05-13 00:00:00 来源:WEB开发网图 1. 越靠后做决定,做出的决定就越符合实际
精益软件运动有一个很好的概念叫做 最后可靠时刻(last responsible moment) — 不是将决定推迟到最后时刻,而是最后可靠时刻。等待的时间越长,就越有机会拥有适合的设计。
表达性
Reeves 论文中的另一个结论是围绕可读设计的重要性的,可读设计又转换成更加可读的代码。发现代码中的惯用模式已经够难了,但是如果语言中再加上一些额外的晦涩的东西,那就会难上加难。例如,发现汇编语言代码基中的惯用模式就非常困难,因为该语言强加了太多晦涩的元素,必须环顾四周才能 “看到” 设计。
既然设计就是代码,那么应该尽量选择表达性最强的语言。充分利用语言的表达性有利于更容易地发现惯用模式,因为设计的媒介更清晰。
下面是一个例子。在本系列较早的一期(“组合方法和 SLAP”)中,我应用组合方法和 单一抽象层(SLAP)原则,对一些已有代码进行了重构。清单 1 显示我得出的顶层代码:
清单 1. 改进后的 addOrder() 方法的抽象
public void addOrderFrom(ShoppingCart cart, String userName,
Order order) throws SQLException {
setupDataInfrastructure();
try {
add(order, userKeyBasedOn(userName));
addLineItemsFrom(cart, order.getOrderKey());
completeTransaction();
} catch (SQLException sqlx) {
rollbackTransaction();
throw sqlx;
} finally {
cleanUp();
}
}
// remainder of code omitted for brevity
更多精彩
赞助商链接