我应该在多大程度上强化 DDD 中实体和值对象的概念?

Dav*_*huu 3 c# architecture design-patterns domain-driven-design

我正在使用 DDD 开发一个 C# 项目。我写了一些课程。有些属于实体类别,有些属于值对象类别。我的问题是,为了忠实于实体和值对象的定义,必须或应该做多少工作?

实体:

  • 禁止公共构造函数。必须使用工厂和/或静态方法,因此保证对象的唯一性(在内存中带有id)。
  • 运算符 ==、!= 重载和 Equals 方法重写,因此比较基于对象引用以外的其他内容;一个 ID

值对象:

  • 允许公共构造函数。工厂、静态方法是允许的,并且可以实现某种缓存,以(可选)保证对象的唯一性(如字符串驻留)。
  • 运算符 ==、!= 重载和 Equals 方法重写,因此比较基于两个对象的所有值。也可以使用结构体来代替。
  • 不可变的

这些是可以执行这些概念的可能性,但是,这些是强制性的吗?因为应用 DDD 概念,创建这些工厂、那些静态方法、重载和重写所有这些方法似乎是一个巨大的负载或少量的工作。

我应该走多远?

Ibr*_*jar 5

有一个我喜欢的编程原则,它叫做KISS

最重要的是,要尽可能地去做,不要仅仅因为听说过或遇到过就去做事情并遵循指导方针。相反,从基本功能开始,然后根据需要不断添加内容。

例如,您谈到了工厂。我通常不会使用它们,除非对象创建很复杂或者我想强制执行某些条件,或者当您谈到用于比较的运算符重载时,我不会这样做,除非我需要实际进行比较或在我的代码中需要它。我尽可能应用的一件事是不可变性,不仅因为它适合值对象,还因为它在多线程支持方面是一个很棒的工具,因为不可变对象在创建后无法修改。

摘要:从简单开始,然后根据需要添加内容。