- 相關推薦
領域驅動設計之體會二
領域驅動設計之體會二2011-02-25 23:25領域驅動設計中分別用實體、值對象和服務來表示模型。其中所謂實體是具有唯一性的對象。在建模中,應該盡早識別出實體。而值對象與實體恰恰相反,它不具有唯一性,其目的是為了減少建立實體的開銷。值對象為了描述領域的特殊方面,我們只關心它的屬性,而不關心其唯一性。有些領域中的動作,它們是一些動詞,看上去卻不屬于任何對象。通常這樣的行為是跨越多個對象的。我們將這樣的行為,顯示的聲明為服務。在領域中,不應該為每一個需要的操作來建立一個服務。但是當一個操作凸顯為一個領域中的重要概念時,就需要為它建立一個服務了。以下是服務的三個特征:1.服務執行的操作涉及一個領域概念,這個領域概念通常不屬于一個實體或者值對象。
2.被執行的操作涉及到領域中的其他對象。
3.操作是無狀態的。
需要注意的是,我們應該嚴格區分領域層的服務和基礎設施層的服務。設計時要確保領域層保持從其他層中隔離開來。
為了降低模型的復雜性,便于系統并行開發,領域驅動中也有模塊的概念。通過把整個系統分割為不同的模塊,來提高代碼的質量,增進內聚,消除耦合。模塊應該具有良好的接口,通過這些接口為其他模塊提供服務。
聚合、工廠和資源庫都與管理領域對象的生命周期相關。
聚合通過一個作為根的實體來訪問其他屬性,用以保持數據的一致性。根是外部可以訪問的唯一對象。聚合是用來定義對象所有權和邊界的領域模式。我們通常不追求模型的完整性,而是讓它們盡量地簡單和容易理解。聚合通過唯一的根實體,建立邊界將內部和外部的對象劃分開來。然而實際使用中,根實體的構造函數往往會很大很復雜。當對象的每個客戶程序持有關于對象構建的專有知識時,就意味著領域對象和聚合的封裝被破壞了。我們可以利用工廠來完成封裝復雜的對象創建過程。一種工廠是給聚合的根增加一個方法,這個方法用來創建對象,強化所有不變量,返回創建對象的引用或者拷貝。更好的方法是創建一個專用工廠類,這樣可以保持對象的簡單,不會造成復雜的構建邏輯的混亂。以下情況不需要創建工廠:
1.構造過程并不復雜;
2.對象的創建不涉及到其他對象的創建,所有的屬性需要傳遞給構造函數。
3.客戶程序對實現很感興趣,可能希望選擇使用策略模式。
4.類是特定的類型,不涉及到繼承,所以不用在一系列的具體實現中進行選擇。
資源庫的目的是封裝所有獲取對象引用所需的邏輯。工廠和資源庫都是模型驅動設計中的模式。工廠關注的是對象的創建,而資源庫關心的是已經存在的對象。需要注意:工廠是"純領域"的,而資源庫會包含對基礎設施的連接。
領域驅動設計是軟件設計的方法論,從思想到結構,闡述了軟件分析設計思路和方法。對我們的實際工作很有借鑒意義。
以上是對領域驅動設計的一點體會,實踐是最好的老師,把理論融入實踐中,并取得成果,其樂無窮啊。就拿以前看一些經典源代碼,有的類被命名為XXXRepository,我就很不理解這樣命名的目的,學習了領域驅動設計,便知道了作者的用心。
【領域驅動設計之體會二】相關文章:
活動設計科學領域教案08-26
活動設計健康領域教案12-19
幼兒活動設計健康領域教案02-16
活動設計健康領域教案7篇12-20
活動設計健康領域教案(7篇)12-24
靜坐之體會04-27
名片的設計之電子教案04-28
秋風之勁(二)04-27
健康領域心得體會02-20