WEB开发网
开发学院软件开发Java 演化架构与紧急设计: 组合方法和 SLAP 阅读

演化架构与紧急设计: 组合方法和 SLAP

 2009-11-05 00:00:00 来源:WEB开发网   
核心提示: populate() 方法现在短多了,看起来像是它需要执行的任务的大纲,演化架构与紧急设计: 组合方法和 SLAP(4),任务的实现都放在私有方法中,把所有原子性部分分离出来之后,因此,我把 createResultSet() 提升到 BoundaryBase 类中,就可以看出我实际上拥有哪些资

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()); 
  } 

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:演化 架构 紧急

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接