演化架构与紧急设计: 组合方法和 SLAP - 编程入门网
onnection")).commit();
}
private boolean setupTransactionStateFor(Connection c)
throws SQLException {
boolean transactionState = c.getAutoCommit();
c.setAutoCommit(false);
return transactionState;
}
演化架构与紧急设计: 组合方法和 SLAP(6)时间:2011-07-13 IBM Neal Ford现在,方法的可读性好多了。它的主体符合组合方法的目标:看起来像是执行的步骤的大纲。方法现在处于高层,甚至非技术用户差不多也 能够理解方法的作用。如果仔细看看 completeTransaction() 方法,会发现它只有一行代码。难道不能把这一行代码放回 addOrder() 方法中 吗?不行,这会损害代码的可读性和抽象层。从高层的订单业务工作流跳到事务的细节是违反 SLAP 原则的。建立 completeTransaction() 方 法能够使代码更概念化,避免具体的细节。如果以后要改变访问数据库的方式,只需修改 completeTransaction() 方法的内容,而不必修改调 用代码。 SLAP 原则的目标是使代码更容易阅读和理解。但是,它也有助于发现代码中存在的惯用模式。注意,在用事务块保护更新方面有一个惯用 模式。可以进一步重构 addOrder() 方法,见清单 8: 清单 8. 事务性访问模式
我添加了一个 wrapInTransaction() 方法,它使用 Gang of Four 提出的 Command Design 模式的内联版本实现这个常用模式。 wrapInTransaction() 方法执行让代码正常工作所需的所有具体工作。考虑到包装这个方法的匿名内部类的真正用途,我留下了几行难看的样 板代码 — addOrderFrom() 方法体中的两行代码。这个资源保护块会在代码中重复出现,所以应该考虑把它提升到层次结构中的更高位置。 我使用匿名内部类实现 wrapInTransaction() 方法是为了说明语言语法的表达能力的重要性。如果用 Groovy 编写这段代码,那么可以使 用闭包块创建更漂亮的版本,见清单 9: 清单 9. 使用 Groovy 闭包包装事务性访问
Groovy 的高级语言语法和特性让我们能够编写出可读性更好的代码,在与组合方法和 SLAP 等补充技术相结合时尤其如此。 结束语 在本期文章中,我讨论了对于代码设计和可读性很重要的两个模式。在改进现有代码的糟糕 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |