我正在查看Sharp Architecture的代码。到目前为止它很酷,但是我遇到了如何在框架中实现DDD值对象的问题(在代码中似乎没有提到这一点)。我假设基本实体类和存储库基础仅用于实体。关于如何在框架中实现值对象的任何想法?
答案 0 :(得分:1)
值对象是不需要基类的简单对象。 (实体具有基类的唯一原因是基于身份提供相等)。实现值对象只是意味着创建一个类来表示域中的值。很多时候,值对象应该是不可变的,并提供相等比较方法来确定与相同类型的其他值对象的相等性。看看here。
答案 1 :(得分:0)
在Sharp Arch中,名称空间SharpArch.Domain.DomainModel中有一个类ValueObject。此对象继承自BaseObject并覆盖==和!=运算符以及Equals()和GetHashCode()方法。该方法重写只调用这两个方法的BaseObject版本,这两个方法又使用GetTypeSpecificSignatureProperties()方法来获取在相等比较中使用的属性。
底线是实体的相等性由
决定对于ValueObjects,使用BaseObject的Equals方法
这有点简化,我建议你从github获取最新的代码并自己阅读上述3个类中的代码。
编辑:关于持久性,this SO question可能有所帮助。除此之外,请参阅NH和Fluent NH官方文件