我正在查看 Sharp Architecture 的代码。到目前为止它很酷,但我在如何在框架中实现 DDD 值对象时遇到问题(代码中似乎没有提到这一点)。我假设基础实体类和存储库基础仅用于实体。关于如何在框架中实现值对象的任何想法?
问问题
333 次
2 回答
1
值对象是不需要基类的简单对象。(实体具有基类的唯一原因是提供基于身份的相等性)。实现一个值对象仅仅意味着创建一个类来代表你的域中的一个值。很多时候值对象应该是不可变的,并提供相等比较方法来确定与相同类型的其他值对象的相等性。看看这里。
于 2012-10-02T18:09:25.980 回答
1
在 Sharp Arch 中,命名空间 SharpArch.Domain.DomainModel 中有一个 ValueObject 类。此对象继承自 BaseObject 并覆盖 == 和 != 运算符以及 Equals() 和 GetHashCode() 方法。该方法覆盖只是调用这两个方法的 BaseObject 版本,而后者又使用 GetTypeSpecificSignatureProperties() 方法来获取要在相等比较中使用的属性。
底线是实体的平等由
- 引用相等
- 同类型?
- id是一样的
- 用 [DomainSignature] 属性修饰的所有属性的比较
对于 ValueObjects,使用 BaseObject 的 Equals 方法
- 引用相等
- 同类型?
- 比较所有公共属性
这有点简化,我建议你从 github 获取最新的代码,并自己阅读提到的 3 个类中的代码。
编辑:关于持久性,这个 SO question可能会有所帮助。除此之外,请参阅官方 NH 和 Fluent NH 文档
于 2012-10-18T07:30:34.177 回答