領域驅動設計(DDD)部分核心概念的個人理解

2021-07-02 11:52:27 字數 1338 閱讀 7452

領域驅動設計(ddd)是一種軟體設計的思考方式。它以領域為核心,分析領域中的問題,通過建立乙個領域模型來有效的解決領域中的核心的複雜問題。eric ivans為領域驅動設計提出了大量的最佳實踐和經驗技巧。只有對領域的不斷深入認識,才能得到乙個解決領域核心問題的領域模型。如果乙個應用的複雜性不是在技術方面的,而是在領域本身,即領域內的業務很複雜,那這種應用,使用領域驅動設計的價值就越大。

領域驅動開發也是一種敏捷開發過程(極限程式設計,xp),強調迭代開發。在迭代過程中,強調開發人員與領域專家需要保持密切的合作關係。極限程式設計假設我們能通過不斷快速重構完善設計。所以,對開發人員的要求非常高。

領域驅動設計提出了一套核心構造塊(building blocks,如聚合、實體、值物件、領域服務、領域工廠、倉儲、領域事件,等),這些構造塊是對物件導向領域建模的一些核心最佳實踐的濃縮。這些構造塊可以使得我們的設計更加標準、有序。

統一語言(ubiquitous language),是領域驅動設計中乙個非常重要的概念。任何乙個領域驅動設計的專案,都需要一種通用語言,一套通用的詞彙。因為沒有通用的語言,就沒有一致的概念,溝通就會遇到障礙,最後的領域模型和軟體也就無法滿足領域內的真實業務需求。通用語言是領域專家和開發人員在對領域問題的溝通、需求的討論、開發計畫的制定、領域模型的設計,以及開發人員之間對領域模型的具體編碼落地實現,等一系列過程中,所有人員使用的一種通用語言。話句話說,就是無論是溝通時所用的詞彙、還是領域模型中的概念、還是**中出現的類名與方法,只要是相同的意思,那就應該使用相同的詞彙。可以看出,這種通用語言不是一下子就可以形成,而是在乙個各方人員討論的過程中,不斷發現、明確,與精煉出來的。

領域建模的方法有很多種,我分享一下自己的一種基於場景為核心的分析方法。大概的思路是:

關於領域、邊界上下文、領域模型、統一語言之間的相互聯絡的理解:

乙個解決方案需要乙個團隊去完成;乙個團隊有多個成員,需求方、領域專家、開發人員、架構師、測試人員,專案經理等;團隊成員之間需要溝通,溝通用的語言就是統一語言(ubiquitous language);

團隊成員工作建模溝通時的上下文就是bounded context;

整個解決方案最後產出的核心是領域模型;領域模型可以復用,相當於解決方案可以被復用,因為特定的領域模型解決的是某個特定的問題域;比如**網有個商品中心,負責實現電子商務領域中的商品子域。後來阿里又出了個天貓,也會有商品中心,但是這兩個商品中心基本是一樣的問題域。所以,我們可以復用之前**實現的商品中心領域模型,並復用之前**商品中心的解決方案,來解決天貓的商品中心。當然,這個只是我個人的認識,乙個例子。具體阿里是否是乙個商品中心同時解決**和天貓的業務,沒具體調研過。

解決方案最後落地下來就是乙個系統;系統的實現需要先設計架構,比如:ddd經典四層架構、cqrs架構,洋蔥架構(只是一種架構思想),等;

領域驅動設計(DDD)部分核心概念的個人理解

原文 領域驅動設計 ddd 部分核心概念的個人理解 領域驅動設計 ddd 是一種基於模型驅動的軟體設計方式。它以領域為核心,分析領域中的問題,通過建立乙個領域模型來有效的解決領域中的核心的複雜問題。eric ivans為領域驅動設計提出了大量的最佳實踐和經驗技巧。只有對領域的不斷深入認識,才能得到乙...

領域驅動設計(DDD)部分核心概念的個人理解

原文 領域驅動設計 ddd 部分核心概念的個人理解 領域驅動設計 ddd 是一種基於模型驅動的軟體設計方式。它以領域為核心,分析領域中的問題,通過建立乙個領域模型來有效的解決領域中的核心的複雜問題。eric ivans為領域驅動設計提出了大量的最佳實踐和經驗技巧。只有對領域的不斷深入認識,才能得到乙...

DDD領域驅動設計

公司裡面敏捷專案要講ddd領域驅動設計,加緊學習了一下,找了一些資料研究。eric evans的 domain driven design領域驅動設計 簡稱ddd,evans ddd是一套綜合軟體系統分析和設計的物件導向建模方法,本站jdon.com是國內公開最早討論ddd 之一,可訂閱 ddd專題...