1

考慮一下由兩個聚合體根CustomerOrder以及「共享」實體Address組成的模型。需要共享實體的聚合體

還要注意的是Addressabstract具有以下子類:PhysicalAddressPostOfficeBoxAddressPrivateBagAddress

A Customer可以將許多地址組織成某種地址簿。 訂購時,顧客將從他們的地址簿中選擇一個Address作爲送貨地址。

我最初的想法是在這兩個實體之間分享一個地址,但後來我選擇了它,因爲它會導致管理各自的不變量時出現問題。

我可以去的另一個選擇是創建Address的兩個層次結構,每個層次都是作爲客戶地址或送貨地址。由於有很多重複的代碼,這再次顯得不正確。

我該如何正確模擬這種情況?

回答

2

實體是應該能夠通過客戶或訂單等自身存在的東西。然而,一個地址是不是一個實體,一個地址是值類型,不能自行因此存在:

  1. 一個地址只能存在作爲被實體之內聚集
  2. 您可以定義值類型的地址層次結構作爲您的域中的值類型,但許多實體可能會使用它。

,我們發現我們遇到這些類型的實體所有的時間,如地址,MoneyType等

解決方案將是您的域中創建1個地址層次值類型。然後,任何實體可以在適用的情況下將地址作爲屬性

+0

感謝您的回答,但看起來我無法使用我的ORM框架JPA實現此功能。問題在於@Embeddable(value對象)無法使用繼承。我將不得不尋找另一種解決方案。 –