我對DDD的認知(一)

2021-09-21 15:46:54 字數 2713 閱讀 3523

1 引言

ddd,全名:domain driven design,中文名:領域驅動設計。

2 ddd的分層

分層的架構方式是我們常用的,這裡的分層是說n-layer,指的是邏輯的分層,目的是分離職責。常用的是三層:表現層,業務邏輯層,資料訪問層。

ddd把原來經典三層(表現層,業務邏輯層,資料訪問層)中的業務邏輯層又細分為兩層:應用層和領域層。應用層負責領域物件的協調和排程,領域層包含具體的領域物件,領域規則(也就是業務規則),更大限度的實現業務規則的重用和職責的分離。將資料訪問層併入基礎架構層。變成了四層:

presentation

domain

infrastructure。

3 ddd的持久化設計 3.1 三層中的持久化設計

三層模式中的資料持久化是由資料訪問層負責的,是至下而上的服務。為什麼說是至下而上的呢?因為我們會寫下面的**。

public class 

product  

public string name  

public 

list

<

parameter> parameters  

public 

list

<

delivery> deliverys  

public 

list

<

image> images } 

public class 

parameter  

public class 

delivery  

public class 

image  

public class 

productdal 

在資料訪問層會寫上所有針對這個product的操作,不管需要與否,有時候乾脆每張表乙個dal,用工具生成實體和資料訪問類,這下資料訪問層就完成了,後面可能會根據需要進行修改。管它業務層是否需要呢,反正需要的我都有了,不需要的我也有了,自己組合吧。

這種情況會造成**浪費,甚至是大量的資料訪問**根本就沒有用過。最重要的是也沒有根據上層的需求來完成持久化的任務,而是簡單的完成了表的增刪改查,反正實現業務你就組合吧。總有一種組合會實現你的業務。這也就怪不得別人叫我們增刪改查程式設計師了,因為如果業務簡單,正好大部分業務都很簡單,那麼業務層就就剩下

new 

productdal().add(

new 

product());

這麼一句了。

3.2 ddd的持久化設計

在ddd中,持久化被放在了基礎架構層中。基礎架構層不僅包括資料持久化,而且包括基礎類庫,cross-cutting等工具。ddd的持久化是至上而下的,是根據ddd的需要進行持久化。持久化的物件也變成了領域物件,而不再是單個表物件。

在領域層定義持久化的介面,持久化的物件是業務物件或者領域物件。在基礎架構層實現領域層需要的持久化介面,具體的實現將領域物件持久化到資料儲存中,是資料庫還是檔案,還是其他什麼儲存裝置。乙個領域物件是儲存在一張表還是分開幾張表,甚至是分開幾個資料庫,都是由基礎架構層中的持久化模組來決定的,對領域層遮蔽實現的細節。只是在領域層需要持久化,或者需要反持久化的時候提供領域層需要的物件即可。

4 聚合

在進行物件導向設計的時候,我們會將一些物件進行組合,組合成為新的物件。隨著系統的複雜,很容易造成物件的關係也複雜起來,物件的關係真的變成了錯綜負責的網狀。

ddd提出的聚合可以解決這個問題,用來減少物件之間的關聯關係。有聚合就有聚合根的概念,要不然就沒有終點,還是會變成網狀。我理解的聚合根,就是乙個聚合的終點。聚合也可以理解為一系列物件,他們的關係好像樹形,需要乙個根節點來表達這一系列的物件。

4.1 如何發現聚合

那麼如何來發現乙個聚合呢?通過下面的乙個小例子,我們來說明一下。

public class 

product  

public string name  

public 

list

<

parameter> parameters  

public 

list

<

delivery> deliverys  

public 

list

<

image> images } 

public class 

parameter  

public class 

delivery  

public class 

image 

其實這時候product,parameter,delivery,image就是乙個聚合,product就是這個聚合的根。因為parameter,delivery,image這些概念脫離了product是沒有意義的,他們都是乙個商品的附屬資訊,單獨的談論一張和乙個引數沒有任何意義。應該是從乙個product出發,然後引出來這個product的引數,配送,,這樣才比較合理。所以他們幾個概念是乙個聚合。

結束

今天我們就理解到這裡,明後天我們再繼續!!!

我對DDD的認知(一)

ddd,全名 domain driven design,中文名 領域驅動設計。分層的架構方式是我們常用的,這裡的分層是說n layer,指的是邏輯的分層,目的是分離職責。常用的是三層 表現層,業務邏輯層,資料訪問層。ddd把原來經典三層 表現層,業務邏輯層,資料訪問層 中的業務邏輯層又細分為兩層 應...

我對DDD的認知(一)

ddd,全名 domain driven design,中文名 領域驅動設計。分層的架構方式是我們常用的,這裡的分層是說n layer,指的是邏輯的分層,目的是分離職責。常用的是三層 表現層,業務邏輯層,資料訪問層。ddd把原來經典三層 表現層,業務邏輯層,資料訪問層 中的業務邏輯層又細分為兩層 應...

我對DDD的認知(一)

ddd,全名 domain driven design,中文名 領域驅動設計。分層的架構方式是我們常用的,這裡的分層是說n layer,指的是邏輯的分層,目的是分離職責。常用的是三層 表現層,業務邏輯層,資料訪問層。ddd把原來經典三層 表現層,業務邏輯層,資料訪問層 中的業務邏輯層又細分為兩層 應...