2012-10-02 55 views
0

我正在檢查夏普體系結構的代碼。到目前爲止,這很酷,但我在解決如何在框架中實現DDD值對象的問題時遇到問題(在代碼中似乎沒有任何提及這一點的東西)。我假設基本實體類和存儲庫基礎僅用於實體。關於如何在框架中實現值對象的任何想法?夏普體系結構值對象

回答

0

在Sharp Arch中,名稱空間SharpArch.Domain.DomainModel中有一個類ValueObject。該對象從BaseObject繼承,並重寫==和!=運算符以及Equals()和GetHashCode()方法。該方法重寫只調用這兩個方法的BaseObject版本,這兩個方法依次使用GetTypeSpecificSignatureProperties()方法獲取要在等式比較中使用的屬性。

底線是實體的平等是

  1. 參考平等
  2. 同類型確定的?
  3. ID是裝飾用[DomainSignature]屬性

對於ValueObjects所有屬性的相同

  • 比較,BaseObject方法用於

    1. 參考平等
    2. 相同類型的equals?
    3. 比較所有的公共屬性

    這是簡化的一點點,我建議你從GitHub獲取最新的代碼,通過代碼中提到的3班念自己。

    編輯:關於持久性,this SO question可能會有所幫助。除此之外,請參考官方的NH和Fluent NH文檔

  • 1

    值對象是不需要基類的簡單對象。 (實體具有基類的唯一原因是基於標識提供相等性)。實現一個值對象就意味着創建一個類來表示你的域的值。很多時候,值對象應該是不可變的,並提供相等比較方法來確定與相同類型的其他值對象的相等性。看看here

    +0

    因此,如果我正確地得到了您,Sharp架構上下文中的值對象將僅僅是一個POCO對象,而不是從任何東西繼承?即便如此,在我的持久性機制中,它可以由一個單獨的表格代表,對吧?但我如何鏈接我的價值對象類和我的數據庫? –