1.3 Fowler的企業(yè)設計模式
Martin Fowler的著作Patterns of Enterprise Application Architecture是有關如何構建企業(yè)級應用程序的最佳實踐和模式的參考書。與GoF設計模式著作一樣,經驗豐富的開發(fā)者毫無疑問已經遵循該書中歸納的許多設計模式。但Fowler著作的價值在于,在對這些模式進行分類時使用一種公用語言來描述模式。該書分為兩部分:前半部分討論n層應用程序和數據訪問、中間件以及表示層的組織;后半部分是與GoF模式著作相似的模式參考,但本書的實現(xiàn)更加具體。
本書將討論Fowler設計模式的ASP.NET實現(xiàn)。下面將介紹本書剩余部分將要涉及的模式。
1.3.1 分層
第3章講解了在企業(yè)ASP.NET應用程序分層時可供自由采用的選項。我們將了解傳統(tǒng)的Web表單代碼隱藏模型帶來的問題以及如何使用傳統(tǒng)的分層方法將表示、業(yè)務邏輯及數據訪問等關注點分離開來。
1.3.2 領域邏輯模式
第4章介紹了組織業(yè)務邏輯的3種常見方法:Transaction Script(事務腳本)、Active Record(活動記錄)及Domain Model(領域模型)。
1. Transaction Script
Transaction Script模式按照線性的、過程式方法來組織業(yè)務邏輯。它將細粒度的業(yè)務用例映射為細粒度的方法。
2. Active Record
Active Record模式按照一種能夠緊密匹配底層數據結構的方式來組織業(yè)務邏輯,即表中表示數據行的對象。
3. Domain Model
Domain Model模式是對現(xiàn)實領域對象的抽象。同時對數據和行為建模。對象之間可以存在與真實領域相匹配的復雜關系。
我們將展示如何在ASP.NET中使用這些模式,以及何時適合選擇某一種模式而非其他模式。
1.3.3 對象關系映射
在第7章中,將注意力轉向如何將業(yè)務實體的狀態(tài)持久化,以及如何從數據存儲中檢索它們。介紹以下幾種支持持久化的基礎設施代碼所需的企業(yè)模式。
1. Unit of Work
Unit of Work(工作單元)模式用來維護一個由已經經過業(yè)務事務修改(添加、刪除或更新)的業(yè)務對象構成的列表。然后,Unit of Work模式負責將這些發(fā)生變化的對象的持久化工作協(xié)調成為一個原子動作。如果出現(xiàn)問題,整個事務就會回滾。
2. Repository
Repository(資源庫)模式大體上用于對象的邏輯集合,它們更為人知的名字叫做聚合(aggregate)。它充當業(yè)務實體的內存集合或倉庫,完全將底層數據基礎設施抽象出來。
3. Data Mapper
Data Mapper(數據映射器)模式用來從原始數據中提取信息以生成對象,以及將業(yè)務對象中的信息轉換到數據庫。業(yè)務對象和數據庫彼此互不了解。
4. Identity Map
Identity Map(標識映射)模式監(jiān)視每一個從數據庫中加載的對象,確保所有對象只加載一次。當后面請求該對象時,在從數據庫檢索之前先檢查標志映射。
5. Lazy Loading
Lazy Loading(惰性加載或延遲加載)模式將獲取資源的過程推遲到真正需要用到該資源的時候。如果想象一個攜帶著通訊錄的Customer對象,那么可以從數據庫中提取這個顧客對象,但保留通訊錄的生成操作,直到真正需要用到該通訊錄時才生成。這可以實現(xiàn)按需加載通訊錄,從而避免在從來不需要用到該地址數據時訪問數據庫。
6. Query Object
Query Object(查詢對象)模式是GoF的Interpreter(解釋器)設計模式的一種實現(xiàn)。查詢對象充當一種從底層數據庫中抽象出來的面向對象查詢,它引用的是屬性和類,而不是真正的表和列。通常,還需要使用一個翻譯器對象來生成用于查詢數據庫的原生SQL語句。