將DAO中的連接封裝好,即讓DAO創建或檢索連接,然後關閉,或者更好地將連接傳遞到DAO並處理DAO外部代碼中的細節?我應該在DAO中傳入還是封裝一個連接?
後續操作:如果將連接封裝在DAO中,如何管理關閉連接?
將DAO中的連接封裝好,即讓DAO創建或檢索連接,然後關閉,或者更好地將連接傳遞到DAO並處理DAO外部代碼中的細節?我應該在DAO中傳入還是封裝一個連接?
後續操作:如果將連接封裝在DAO中,如何管理關閉連接?
DAO應該執行CRUD操作並從調用者隱藏這些操作。所以你應該封裝連接。另一方面,如果上層協調DAO(例如事務處理),那麼你也可以將連接傳遞到DAO中(並且在打開它的同一層上關閉它,而不是在DAO中)。
底線是......它實際上取決於您的應用程序的每一層所承擔的責任。呼叫者應該關心DAO檢索數據的位置嗎?如果不是,則封裝連接。
從純粹的可用性和標準的觀點來看,我認爲你需要DAO來照顧連接。這畢竟是數據訪問的主要功能。
考慮你的使用,你想要使用DAO的表示/業務層代碼充分了解數據庫以創建連接以傳遞給DAO?如果您需要移動數據庫或重新命名數據庫,那麼該數據庫非常適合封裝連接。
使用管理自己連接的DAO還可以更加簡潔地使用調用代碼中的對象,提高IMO的整體可讀性。
我想你已經回答了你自己的問題。基本的設計模式解釋了DAO應該創建/檢索連接(通過工廠說)並隱藏那些來自任何調用者的服務層類。
http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html
你看到在保持這個外部有什麼好處?
我認爲DAO的關鍵點在於,您可以在應用程序的其他部分無需知道或關心的情況下更換實現。我已經在一個項目上做了這個。 DAO接口保持不變,但連接細節發生變化,因此您無法從外部看到它。
我正在考慮創建一個工廠和DAO調用,這本質上是封裝。 – 2010-03-09 15:33:44
DAO工廠用於生產混凝土DAO(實現)。我不確定我是否明白「創建工廠並讓DAO呼叫」的意思! – 2010-03-09 15:52:16
對不起,我的意思是連接工廠,而不是DAO工廠。 – 2010-03-09 16:16:34