2011-12-06 176 views
4

我們正在開發一個使用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點,聚合和有界的上下文有什麼區別? 「客戶」不會聚集在一起(「客戶」是聚合根),它還包含只存在於客戶上下文中的任何實體和價值對象,而不是有界的上下文嗎?

回答

5
  1. 是的,因爲CustomerType有一個身份和相關的描述,它是一個實體。

  2. 是否Customer類有一個CustomerType財產或財產CustomerTypeId取決於它是否需要訪問其他屬性上CustomerType。無論哪種方式,CustomerType是它自己的實體有自己的存儲庫。

  3. 如果您有數百個實體,特別是您指定類型的實體,則可能表示該項目變得太大,您可能需要劃分到適當的有界上下文。

+0

感謝您的回覆。 – Peter

+0

我想在評論中加入一些代碼,但由於這是我的第一篇文章,我正在努力一點。 – Peter

+0

仍在掙扎,因此我在原始查詢的底部添加了一個部分。請看看 – Peter