Persistent層實現的兩種模式:Dao Pattern & Command Pattern
Persistent層的作用在于屏蔽數據庫細節方面的影響(也就是說通過此處來保證對于數據庫移植等的支持),同時封裝所有與數據庫交互的數據邏輯處理。Java EE對于Persistent層的實現推薦采用的為Dao Pattern。
很久前在TSS上有篇關于用Command Pattern來實現Persistent層的文章,之所以會提出這個主要原因在于當Persistent層采用ORM工具時,ORM工具本身就提供了對于CRUD的良好支持,此時采用Command Pattern也是實現Persistent層的一個不錯的方式。
實際項目/系統中在Persistent層采用Dao Pattern實現的應該還是占據多數,不過如果采用Command Pattern來實現也是有其優勢,在此對兩種模式實現的Persistent層做一個比較。
Dao Pattern
在采用Dao Pattern的實現下,通常是每個持久對象即擁有一個Dao,通常此Dao通過依賴一個通用的Dao來完成與數據庫交互的邏輯處理,這里以一個簡單的用戶的Dao為例:
持久對象Dao














































這是一個典型的、簡單的Dao對象,上層在調用時則可使用如DaoFactory.getDao(UserDao.class)或采用IoC直接注入的方法進行調用。
Command Pattern
在采用Command Pattern的實現下,每個持久對象的數據庫處理邏輯采用命令來實現,也就是說每個交互動作都是一個命令,對于只有普通CRUD操作而無復雜的數據邏輯處理的持久對象來說則可直接采用系統中已有的各種交互邏輯處理Command,同樣以一個簡單的用戶數據庫交互對象為例:
對于用戶的保存交互:















































以上是對于兩種模式實現Persistent的一個簡單的描述(以上的代碼只是個簡單的示例),可以看到兩者都可實現Persistent層所想要的效果,Persistent層存在的必要性我想沒什么值得多說的,以Dao pattern or Command Pattern實現Persistent層我覺得各有優缺點,簡單對比了一下,至于在Persistent層的通用方面(對外層屏蔽數據庫細節、封裝數據交互邏輯)由于兩者都可實現,所以沒做比較:
|
DAO Pattern |
Command Pattern |
優 點 |
通過一個Dao對象完整的表達該持久對象與數據庫的各種交互邏輯 |
細粒度的重用(使得普通的CRUD操作可不斷的重用,避免過多Dao的產生) |
不 足 |
導致了眾多DAO代碼的產生,而且Dao中往往方法都相同,這個時候通常需要去抽象形成一個基類的Dao避免CRUD在每個DAO中的重復,但眾多DAO的產生仍然不可避免。 |
分散了持久對象的數據庫交互邏輯,也就是說無法有一個可看到該持久對象的數據庫交互邏輯的全貌對象,而是通過各種Command去完成。 |
posted on 2005-12-26 13:10 BlueDavy 閱讀(1916) 評論(2) 編輯 收藏 所屬分類: Java