演化架构与紧急设计: 组合方法和 SLAP
2009-11-05 00:00:00 来源:WEB开发网把这些方法提升到父类中之后,PartDb 类已经大大简化了,见清单 5:
清单 5. 简化和重构后的 PartDb 类public class PartDb extends BoundaryBase {
private static final int DEFAULT_INITIAL_LIST_SIZE = 40;
private static final String SQL_SELECT_PARTS =
"select name, brand, retail_price from parts";
private static final Part[] TEMPLATE = new Part[0];
private ArrayList partList;
public PartDb() {
partList = new ArrayList(DEFAULT_INITIAL_LIST_SIZE);
}
public Part[] getParts() {
return (Part[]) partList.toArray(TEMPLATE);
}
protected String getSqlForEntity() {
return SQL_SELECT_PARTS;
}
protected void addEntityToListFromResultSet(ResultSet rs)
throws SQLException {
Part p = new Part();
p.setName(rs.getString("name"));
p.setBrand(rs.getString("brand"));
p.setRetailPrice(rs.getDouble("retail_price"));
partList.add(p);
}
}
我通过前面的重构得到了什么?首先,与以前相比,现在的这两个类更集中于自己的任务。这两个类中的所有方法都很简洁,很容易理解。第二,PartDb 类专门处理 parts,不涉及其他东西。所有通用的连接代码都已经转移到父类中了。第三,所有方法现在都是可测试的:每个方法(除了 populate())都只做一件事。populate() 方法是这些类的实际工作流方法。它使用所有其他(私有)方法执行工作,看起来像是执行的步骤的大纲。第四,现在有了小的构建块,可以组合使用它们,所以方法重用变得更容易了。对于原来的 populate() 方法那样的大型方法,重用的机会很少:在其他类中,几乎不可能需要以完全相同的次序做相同的事情。实现原子性方法使我们能够组合使用功能。
更多精彩
赞助商链接