我們正在開發一個使用DDD的項目,但卻陷入瞭如何處理查詢實體的問題。 例如,我們有一個名爲「Customer」的聚合,實體「Customer」也是聚合根。實體「客戶」具有「CustomerTypeID」屬性。DDD - 應該如何處理查找實體?
但是我們也有一個實體「CustomerType」,表示所有現有的客戶類型(ID和說明)。將有一個管理員功能允許用戶維護客戶類型(即添加新的客戶類型等)。
請注意,我不是在談論改變特定客戶的客戶類型,而是關於維護客戶類型列表。
我道歉了冗長的故事,但這裏是我的問題:
我是正確的思想,「CustomerType」是一個實體,而不是一個值對象?
「客戶類型」應該在「客戶」集合中還是應該在自己的集合中,因爲我們將訪問它並將其維護在特定客戶的上下文之外?
如果此實體和任何其他實體(基本查找實體(如客戶狀態,產品類型等))應該自己聚合(並且是這些聚合的聚合根),我不會結束數百個知識庫? (因爲每個聚合根將擁有自己的倉庫)
正如你可以看到我得到在這裏亂七八糟,只是需要在正確的方向指向。
=================================== 我試着寫一些代碼來回復eulerfx's回覆,但我無法讓它工作,所以我會把它放在這裏。
關於第2點,在屏幕上我們顯然只會顯示類型的描述(例如「個人」)。請問是不是意味着我想最終是這樣的?:
Public Class Customer
Inherits EntityBase(Of Integer)
Implements IAggregateRoot
Public Property CustomerID As Integer
...
Public Property CustomerType As CustomerType
...
和
公共類CustomerType 繼承EntityBase(整數) 器具IAggregateRoot
Public Property CustomerTypeID As Integer
Public Property CustomerTypeDescription As String
還是應該由物業在「Customer」類中是CustomerTypeID?
關於第3點,聚合和有界的上下文有什麼區別? 「客戶」不會聚集在一起(「客戶」是聚合根),它還包含只存在於客戶上下文中的任何實體和價值對象,而不是有界的上下文嗎?
感謝您的回覆。 – Peter
我想在評論中加入一些代碼,但由於這是我的第一篇文章,我正在努力一點。 – Peter
仍在掙扎,因此我在原始查詢的底部添加了一個部分。請看看 – Peter