演化架构与紧急设计: 组合方法和 SLAP
2009-11-05 00:00:00 来源:WEB开发网populate() 方法现在短多了,看起来像是它需要执行的任务的大纲,任务的实现都放在私有方法中。把所有原子性部分分离出来之后,就可以看出我实际上拥有哪些资产了。注意,getDatabaseConnection() 方法没有对 parts 做任何操作 — 它只提供通用的数据库连接功能。这说明这个方法不应该放在这个类中,所以我要把它重构到 PartDb 类的父类 BoundaryBase 中。
清单 2 中是否还有其他方法是通用的,能够放到父类中?createResultSet() 方法看起来相当通用,但是它包含 parts 的链接,即 SQL_SELECT_PARTS 常量。如果能够迫使子类 (PartDb) 把这个 SQL 字符串的值告诉父类,就可以把这个方法提升到父类中。这正是抽象方法的作用。因此,我把 createResultSet() 提升到 BoundaryBase 类中,并声明一个名为 getSqlForEntity() 的抽象方法,见清单 3:
清单 3. 目前的 BoundaryBase 类abstract public class BoundaryBase {
private static final String DRIVER_CLASS =
"com.mysql.jdbc.Driver";
private static final String DB_URL =
"jdbc:mysql://localhost/orderentry";
protected Connection getDatabaseConnection() throws ClassNotFoundException,
SQLException {
Connection c;
Class.forName(DRIVER_CLASS);
c = DriverManager.getConnection(DB_URL, "webuser", "webpass");
return c;
}
abstract protected String getSqlForEntity();
protected ResultSet createResultSet(Connection c) throws SQLException {
Statement stmt = c.createStatement();
return stmt.executeQuery(getSqlForEntity());
}
- ››演化架构和紧急设计: 使用 Groovy 构建 DSL
- ››演化架构和紧急设计: 使用 DSL
- ››演化架构和紧急设计: 利用可重用代码,第 2 部分:...
- ››演化架构和紧急设计: 利用可重用代码,第 1 部分:...
- ››紧急时刻的iPhone 医学影像应用
- ››演化架构和紧急设计: 演化架构
- ››演化架构与紧急设计: 积累惯用模式
- ››演化架构与紧急设计: 语言、表达性与设计:第 2 部...
- ››演化架构与紧急设计: 对设计进行重构
- ››演化架构与紧急设计: 研究架构和设计
- ››演化架构与紧急设计: 测试驱动设计,第 1 部分
- ››演化架构与紧急设计: 测试驱动设计,第 2 部分
更多精彩
赞助商链接