尖锐的架构价值对象

时间:2012-10-02 15:01:45

标签: domain-driven-design sharp-architecture

我正在查看Sharp Architecture的代码。到目前为止它很酷,但是我遇到了如何在框架中实现DDD值对象的问题(在代码中似乎没有提到这一点)。我假设基本实体类和存储库基础仅用于实体。关于如何在框架中实现值对象的任何想法?

2 个答案:

答案 0 :(得分:1)

值对象是不需要基类的简单对象。 (实体具有基类的唯一原因是基于身份提供相等)。实现值对象只是意味着创建一个类来表示域中的值。很多时候,值对象应该是不可变的,并提供相等比较方法来确定与相同类型的其他值对象的相等性。看看here

答案 1 :(得分:0)

在Sharp Arch中,名称空间SharpArch.Domain.DomainModel中有一个类ValueObject。此对象继承自BaseObject并覆盖==和!=运算符以及Equals()和GetHashCode()方法。该方法重写只调用这两个方法的BaseObject版本,这两个方法又使用GetTypeSpecificSignatureProperties()方法来获取在相等比较中使用的属性。

底线是实体的相等性由

决定
  1. 参考平等
  2. 同类型?
  3. Id' s是相同的
  4. 使用[DomainSignature]属性
  5. 修饰的所有属性的比较

    对于ValueObjects,使用BaseObject的Equals方法

    1. 参考平等
    2. 同类型?
    3. 比较所有公共属性
    4. 这有点简化,我建议你从github获取最新的代码并自己阅读上述3个类中的代码。

      编辑:关于持久性,this SO question可能有所帮助。除此之外,请参阅NH和Fluent NH官方文件