DDD-基礎知識 領域模型:失血、貧血、充血 失血模型:基於資料庫的領域設計方式其實就是典型的失血模型; 一般開發的時候,都是根據資料庫和表一一對應的設計。
![DDD基礎知識1](https://i.iter01.com/images/8c1332665738592ba6add66bf5c5d265802147e0a5fbfdeaf36e261fe8a653f4.png)
在上述標中,如果存在同時修改兩個 表,那麼一般會使用manager去控制。
貧血:人在查詢地址的時候,在上述失血模式中,肯定會去調研addressDao.find(),在貧血中就不會了,貧血中在一個類Person中給另外一個類Address賦值。
![DDD基礎知識1](https://i.iter01.com/images/62e2892458c2be9621d26f332985934fd57b44bbfcfa14f53fb7f5c5f22d243c.png)
充血:在上述貧血模式中,一個類操作了資料庫,這樣很不好。充血模式中使用了依賴注入。
![DDD基礎知識1](https://i.iter01.com/images/79c43df834ed30c8aff75e16dc2a700eedefd5df00d5ef44475a224e666df023.png)
一 實體 什麼是實體:有業務生命週期,使用標識進行跟蹤。
比如人是一個實體,人從出生到死亡,都在不斷的變化中,人有自己的生命週期。但是每個人都是不一樣的,每個人都是唯一的,這個唯一可以用身份證號碼去區分,每個人的身份證號都是不一樣的。 實體:1 應該有生命週期 2 具有唯一的標識
![DDD基礎知識1](https://i.iter01.com/images/5811df51783d59d39bb1b819ca24db76027f049ec8a0f8f73825855da04fcf25.png)
2 值物件 1.不可變的 2.將不同的相關屬性組合成了一個概念整體 3.當度量和描述改變時,可以用另外一個值物件予以替換 4.可以和其他值物件進行相等性比較 5.不會對協作物件造成副作用
值物件是不可變的,比如人有家,家的地址A是不會變化的。 當然有人說搬家了怎麼辦呢,搬家了就換一個地址B,但是他以前的家A還是在原來的A這個地址。
img-blog.csdn.net/20181024171…
![DDD基礎知識1](https://i.iter01.com/images/aa973944c18cca0f0df8af76c0f6d34b850c8f344acc2d9de71fade10aee0a34.png)
3 聚合 聚合是領域物件的顯式分組,旨在支援領域模型的行為和不變性,同時充當一致性和事務性邊界。
![DDD基礎知識1](https://i.iter01.com/images/4fd3a094951144027af7623d446ed76d4637912952c3bdd3efd2bd694986fe19.png)
基於業務用例而非現實生活建立必要的關聯 減少不必要的關聯 將雙向的關聯轉換為單向關聯
![DDD基礎知識1](https://i.iter01.com/images/13c26313edf2d64ef67ca54527b3a0425290f6b1a14dbe9f734d796282070968.png)