0

我開始與域驅動開發和大量閱讀後,我試圖重構應用程序的DDD方式。但我面臨着一個根本性問題,不知道如何解決。作爲實體或值對象的DDD查找

作爲介紹我的應用程序應該做的一些簡化任務。這是一個課程預定申請:

  • 一門課程包括類別,日期,描述和位置
  • 類別和位置可以從Dropdownbox
  • 一個特殊的設置部分可以選擇給用戶的possibillity添加和 更改類別和位置

我對一個對象的不可變狀態有點困惑。首先,我認爲一個例子必須是一個實體對象,因爲它有一個身份。但在範圍當然地點本身是不可改變的,不能改變。

我真的很困惑。任何人都可以幫我清除我的觀點嗎?

回答

0

如果位置可以獨立於課程進行管理(添加,編輯,刪除等),則位置很可能是獨立的聚合根。你會改變你的課程引用它的位置的ID,而不是包含一個位置。

我會這樣做,因爲位置是有限的,你可能想看看他們的建模作爲實體(即他們是你想要存儲和ids反對,而不是像學生的家庭地址,它們很可能總是價值對象,因爲它們沒有可變性或可重用性),位置作爲聚合根,每個位置都有一個地址屬性,這將是一個值對象(如果您使用的是SQL,那麼地址可以被非規格化並且與位置數據一起被存儲在行中)。

如果您不希望開發人員能夠修改任何位置的任何屬性,那麼您可以設計您的類以防止修改。

0

的decicision是基於你如何識別它們。(不imutability)

位置是usally的實體。但是在某些情況下,如果您只關心標識符,則值對象也很好。

@Entity 
Location { 
    @Identifier private String code; 

    //many other mutable properties 
} 

@ValueObject 
Location { 
    private String code;//the only property 
} 

DDD不擅長產品信息或其他內容管理導向的事情。我寧願保留原始結構,但找到一個小的子域來重構庫存或定價。