1. 表數據入口
充當數據庫表訪問入口的對象,一個實例處理表中所有的行。
1)運行機制:
表數據入口包含了用於訪問單個表或試圖的所有SQL,如選擇、插入、更新、刪除等。其他代碼調用它的方法來實現所有與數據庫的交互。
表數據入口可以和表模塊一起使用,它產生一個記錄集數據結構由表模塊處理
2)使用時機:
數據入口特別適用於事務腳本,行數據入口和表數據入口間的選擇歸結於如何處理多數據行,當結果集的表現便於事務腳本處理時,用表數據入口。
3)示例:
如下2圖分別是普通情況下、充分利用.net特徵下的表數據入口實現:
2. 行數據入口
充當數據源中單條記錄入口的對象,每行一個實例。
1)運行機制:
特徵:行數據入口是和單條記錄及其相似的對象,如數據庫中的一行(該對象中數據庫中的每一列變成了一個域)
問題:在哪裏存放產生該模式的查找操作?鑑於選擇靜態查找方法不支持爲不同數據源提供不同查找方法的多態,需要設置單獨的查找方法對象(這樣關係數據庫每一張表都一個查找方法類和入口來獲得結果)
行數據入口和活動記錄之間的區別:是否存在任何領域邏輯,如果存在,則是活動記錄
2)使用時機:
事務腳本(關於表數據入口和行數據入口之間的選擇,參考表數據入口)
行數據入口可以和數據映射器一起配合使用:行數據入口從元數據自動生成,數據映射器由手動實現
3)實例:
3. 活動記錄
一個對象,它包含數據庫表或視圖中的某一行,封裝數據庫訪問,並在這些數據上增加了領域邏輯
1)運行機制:
活動記錄的本質是一個領域模型,這個領域模型中的類和基數據庫中記錄結構十分吻合。
活動記錄通常具有如下方法:
由SQL結果集中的一行構造一個活動記錄實例;
爲將來對錶的插入構造一個新的實例;
用靜態查找方法來包裝常用的SQL查詢和返回活動記錄(也可以分離爲一個單獨的類);
更新數據庫並將活動記錄中的數據插入數據庫;
獲取或設置域;
實現部分業務邏輯。
2)使用時機:
適合於創建、讀、更新、刪除等不太複雜的領域邏輯;
優點:簡單,容易創建,易於理解;
缺點:要求對象的設計和數據庫的設計緊耦合,項目中難以進一步重構;當業務邏輯複雜,對象間有引用、集合和繼承等關心時,難以映射到活動記錄
3)示例:
其中,標圈的是領域邏輯實現。
4. 數據映射器
在保持對象和數據庫(以及映射器本身)彼此獨立的情況下在二者之間移動數據的一個映射器層,如下:
1)運行機制:
主要功能:分離領域和數據源
延時加載
基於元數據的映射
2)使用時機:
業務邏輯複雜,數據庫方案和對象模型需要彼此獨立演變時
3)實例:
其中,DataMapper實現了IPersonFinder接口,用於查找方法實現。