callbackHandler.processRow(rs);
}
rs.close();
ps.close();
}
catch (SQLException ex) {
throw this.exceptionTranslater.translate("JdbcTemplate.query(sql)", sql, ex);
}
finally {
DataSourceUtils.closeConnectionIfNecessary(this.dataSource, con);
}
}
首先(1處),代碼利用DataSourceUtils從dataSource中獲得一個可用的連接,然后使用PrepareStatement的方式處理查詢語句。2處是整段程序的精華,代碼使用了一個回調接口,把從數據庫中取出的記錄集交給回調接口來處理。我們把這里的代碼和前面的客戶端代碼結合起來看,就能夠明白它的思路。3處用于處理異常,將SQLException轉義為更具有意義的異常,即DataAccessException的子類,因為單單靠一個SQLException來表示復雜的數據庫操作異常未免過于簡單了。最后(4處),不管執行的結果如何,都關閉連接。
應該說,這一段代碼并不難理解。但它充分表現了框架的工作方式和以下我們將談到的框架的意義。
框架對軟件開發的意義
知識積累
框架的核心價值是對知識的積累。軟件開發是一項知識性的活動。但是知識存在于人的大腦中,是最難進行積累的。而在軟件開發中,代碼是最確定的知識,人和機器通過瀏覽代碼都能夠了解代碼的目的,而且不會出現不同的理解。所以,從代碼出發進行知識的積累是最佳的辦法?蚣芫褪沁@種思路的產出物?蚣馨舜罅康拇a,這些代碼是對某個特定問題領域中抽象概念及這些抽象概念之間關系的描述。所以,框架能夠勝任知識積累的工作。
雖然代碼是框架的核心,但是光有代碼的框架是很難為人所理解的。代碼的層次太低,開發人員從代碼的角度來完全的理解框架是很困難的。所以,必須要有層次高于代碼的工件。這些工件可以是設計文檔、領域模型、UML圖、JavaDoc。他們的目的都是為了幫助框架的開發人員和使用人員順利的理解框架。
就像我們上面的實例中,通過一個JdbcTemplate對象,就將一個JDBC的最佳實踐給積累起來了。當然,你也可以使用文檔要求開發人員按照某種方式來使用JDBC,但在實踐中會遇到不少的問題,例如,JDBC的異常處理可能過于繁瑣而被忽略。雖然大多數時候都不會有問題,但是當問題發生時往往會很麻煩。采用框架的方式則不會有類似的問題。
文章來源于領測軟件測試網 http://www.kjueaiud.com/