1. 程式人生 > >DDD的實體、值物件、聚合根的基類和介面:設計與實現

DDD的實體、值物件、聚合根的基類和介面:設計與實現

# 1 前置閱讀 在閱讀本文章之前,你可以先閱讀: * 什麼是DDD # 2 實現值物件 值物件有兩個主要特徵:它們沒有任何標識。它們是不可變的。 我們舉個例子:小明是“浙江寧波”人,小紅也是“浙江寧波”人,小王是“浙江杭州”人,在這個例子中,我們把地址可以獨立出一個值物件出來,我們會遇到了多個物件是否相同的問題,例如小明和小紅的地址應該是相等,小明和小王應該是不相等,這很好理解,我們來看一下例子; ``` public class Address { public string Province; public string City; } var xm = new Address { Province = "浙江", City = "寧波" }; var xh = new Address { Province = "浙江", City = "寧波" }; var xw = new Address { Province = "浙江", City = "杭州" }; Console.WriteLine(xm.Equals(xh)); Console.WriteLine(xm.Equals(xw)); ``` 讓我們來看看輸出結果: ``` False False ``` 這個顯然不符合我們預期,我們需要重寫一下Equals,確保地址值相等的情況下物件相等。 ``` public class Address { public string Province; public string City; public bool Equals(Address obj) { return this.Province.Equals(obj.Province) && this.City.Equals(obj.City); } } var xm = new Address { Province = "浙江", City = "寧波" }; var xh = new Address { Province = "浙江", City = "寧波" }; var xw = new Address { Province = "浙江", City = "杭州" }; Console.WriteLine(xm.Equals(xh)); Console.WriteLine(xm.Equals(xw)); ``` 讓我們來看看輸出結果: ``` True False ``` 這個顯然符合我們預期了,接下來我們把值物件的Equals方法封裝到基類中。 ``` public abstract class ValueObject { protected abstract IEn