Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Domain driven design DDD:what';实体和值对象之间的差异的用途是什么?_Domain Driven Design_Entities_Value Objects - Fatal编程技术网

Domain driven design DDD:what';实体和值对象之间的差异的用途是什么?

Domain driven design DDD:what';实体和值对象之间的差异的用途是什么?,domain-driven-design,entities,value-objects,Domain Driven Design,Entities,Value Objects,实体和值对象都是域对象。在DDD中知道两者之间的区别有什么用?例如,将域对象视为实体或值对象是否有助于建立更清晰的域模型?是的,能够区分两者之间的差异非常有用,特别是在设计和实现类型时 主要区别之一是在处理相等性时,因为实体的行为应该与值对象完全不同。了解对象是实体还是值对象可以告诉您应该如何实现类型的相等。这本身是有帮助的,但并不止于此 实体是可变类型(至少在概念上是如此)。实体背后的整个理念是,它代表了一个具有已知生命周期进展的领域概念(即,它被创建,它经历了多次转换,它被存档,可能最终被删

实体和值对象都是域对象。在DDD中知道两者之间的区别有什么用?例如,将域对象视为实体或值对象是否有助于建立更清晰的域模型?

是的,能够区分两者之间的差异非常有用,特别是在设计和实现类型时

主要区别之一是在处理相等性时,因为实体的行为应该与值对象完全不同。了解对象是实体还是值对象可以告诉您应该如何实现类型的相等。这本身是有帮助的,但并不止于此

实体是可变类型(至少在概念上是如此)。实体背后的整个理念是,它代表了一个具有已知生命周期进展的领域概念(即,它被创建,它经历了多次转换,它被存档,可能最终被删除)。即使几个月或几年过去了,它也代表着同一个特定的“事物”,并且它会随着时间的推移而改变状态

另一方面,值对象只是表示没有任何固有标识的值。尽管您不必这样做,但它们非常适合作为不可变类型实现。这非常有趣,因为根据定义,任何不可变类型都是线程安全的。随着我们进入多核时代,知道何时将对象实现为不可变类型是非常有价值的

当等式语义众所周知时,它在单元测试中也有很大帮助。在这两种情况下,平等都有明确的定义。我不知道您使用的是哪种语言,但在许多语言(C#、Java、VB.NET)中,默认情况下等式是由引用确定的,这在许多情况下并不特别有用