首页 / 软件开发 / JAVA / 演化架构与紧急设计: 组合方法和 SLAP
演化架构与紧急设计: 组合方法和 SLAP2011-07-13 IBM Neal Ford简介:如何在陈旧的代码库中找出隐藏的设计?本文讨论两种对于代码结构很重要的模式:组合方法 和单一抽象层。对代码应用这些原则有助于找到以前隐藏的可重用资产,有助于把现有的代码抽象为成熟的框架。在这个 系列 的前两期中,我讨论了如何使用测试驱动开发 (TDD) 帮助您逐步发现设计。如果从头开始一个新项目,这种方法的效果非常 好。但是,更常见的情况是您手中已经有许多并不完善的代码,在这种情况下应该怎么办呢?如何在陈旧的代码库中找出可重用的资产和隐藏 的设计?本文讨论两个很成熟的模式,它们可以帮助您重构代码,寻找可重用的资产:组合方法 和单一抽象层 (SLAP) 原则。良好设计的元素已经 在您的代码中存在了;您只需通过工具找出已经创建的隐藏的资产。组合方法科技的变化速度非常快,这有一种糟糕的副作用:开发人员常常会忽视软件知识。我们往往会认为几年前的东西一定已经过时了。这当然是 不对的:许多老书仍然能够提供对于开发人员很重要的知识。这样的经典著作之一是 Kent Beck 所著的 Smalltalk Best Practice Patterns 。作为 Java 开发人员,您可能会问,“13 年前的 Smalltalk 书对我有什么用呢?” Smalltalk 开发人员是第一批用面向对象语言编写程序 的开发人员,他们首创了许多出色的思想。其中之一就是组合方法。组合方法模式有三条关键规则:把程序划分为方法,每个方法执行一个可识别的任务。让一个方法中的所有操作处于相同的抽象层。这会自然地产生包含许多小方法的程序,每个方法只包含少量代码。在 “测试驱动设计,第 1 部分” 中,我在讨论在编写实际代码之前编写单元测试时讨论过组合方法。严格遵守 TDD 会自然地产生符合组 合方法模式的方法。但是,对于现有的代码,应该怎么办呢?现在,我们来研究如何使用组合方法发现隐藏的设计。惯用模式您可能很熟悉正式的设计模式运动,这一运动起源于 Gang of Four 所著的 Design Patterns。它描述了应用于所有项目的通用模式。但是 ,每个解决方案还包含惯用模式,这些模式不够正式,但是得到了普遍应用。惯用模式代表代码中常用的设计习惯。紧急设计的真正诀窍就是 发现这些模式。它们包括从纯技术模式(例如这个项目中处理事务的方式)到问题领域模式(比如 “在发货之前总是要检查客户的信用”)的 各种模式。重构成组合方法请考虑清单 1 中的简单方法。它使用低层 JDBC 连接一个数据库,收集 Part 对象,把它们放在一个 List 中:清单 1. 用于收集 Part 的简单方法public void populate() throws Exception {
Connection c = null;
try {
Class.forName(DRIVER_CLASS);
c = DriverManager.getConnection(DB_URL, USER, PASSWORD);
Statement stmt = c.createStatement();
ResultSet rs = stmt.executeQuery(SQL_SELECT_PARTS);
while (rs.next()) {
Part p = new Part();
p.setName(rs.getString("name"));
p.setBrand(rs.getString("brand"));
p.setRetailPrice(rs.getDouble("retail_price"));
partList.add(p);
}
} finally {
c.close();
}
}