DDD的實體、值物件、聚合根的基類和介面:設計與實現
阿新 • • 發佈:2021-01-28
# 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