Domain driven design 夏普建筑价值对象

Domain driven design 夏普建筑价值对象,domain-driven-design,sharp-architecture,Domain Driven Design,Sharp Architecture,我正在查看夏普建筑公司的代码。到目前为止,这很酷,但我在思考如何在框架中实现DDD值对象时遇到了问题(代码中似乎没有提到这一点)。我假设基本实体类和存储库库只用于实体。有没有关于如何在框架中实现值对象的想法?值对象是不需要基类的简单对象。(实体具有基类的唯一原因是基于标识提供平等性)。实现一个值对象仅仅意味着创建一个类来表示域中的值。很多时候,值对象应该是不可变的,并提供相等比较方法来确定与相同类型的其他值对象的相等性。看看。在Sharp Arch中,名称空间SharpArch.Domain.D

我正在查看夏普建筑公司的代码。到目前为止,这很酷,但我在思考如何在框架中实现DDD值对象时遇到了问题(代码中似乎没有提到这一点)。我假设基本实体类和存储库库只用于实体。有没有关于如何在框架中实现值对象的想法?

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

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

底线是实体的相等性由

  • 参考等式
  • 同一类型
  • 身份证是一样的
  • 使用[DomainSignature]属性修饰的所有属性的比较
  • 对于ValueObjects,使用BaseObject的Equals方法

  • 参考等式
  • 同一类型
  • 比较所有公共属性
  • 这有点简化,我建议您从github获得最新的代码,并亲自阅读上述3个类中的代码


    编辑:关于持久性,可能会有所帮助。除此之外,请参考NH和Fluent NH官方文档

    ,如果我没有弄错的话,Sharp架构中的值对象将只是一个POCO对象,而不是从任何东西继承?即便如此,在我的持久化机制中,它可以由一个单独的表表示,对吗?但是如何在我的值对象类和数据库之间建立链接呢?