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

有帮助吗?

解决方案

在夏普拱门中,命名空间sharkarch.domain.domainmodel中存在一个类valueObject。此对象从BaseObject继承并覆盖==和!=运算符和equals()和gethashcode()方法。该方法覆盖只需调用这两种方法的BaseObject版本,这是又使用GettypespeCificsignAthEproperties()方法来获取在相等比较中使用的属性。

底线是实体的平等由

确定

  1. 参考等立性
  2. 相同类型?
  3. id是相同的
  4. [Domainignature]属性
  5. 装饰的所有属性的比较

    对于ValueObjects,使用BaseObject的等于方法

    1. 参考等立性
    2. 相同类型?
    3. 比较所有公共属性
    4. 这有点简化,我建议您从Github获取最新代码,并通过自己提到的3个课程中的代码读取。

      编辑:关于持久性,这么疑问< / a>可能有所帮助。除此之外,请参阅官方NH和Fluent NH文件

其他提示

值对象是不需要基类的简单对象。(实体唯一的原因是基础类是根据身份提供平等)。实现值对象只是意味着创建类以表示域中的值。许多次值对象应该是不可变的,并提供平等的比较方法来确定相同类型的其他值对象的平等。看看

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top