Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Design patterns DDD-值对象与实体对象_Design Patterns_Domain Driven Design_Value Objects_Entityobject - Fatal编程技术网

Design patterns DDD-值对象与实体对象

Design patterns DDD-值对象与实体对象,design-patterns,domain-driven-design,value-objects,entityobject,Design Patterns,Domain Driven Design,Value Objects,Entityobject,我是DDD新手,正在努力理解其中的一些概念。您如何确定域中哪些对象是实体对象,哪些对象是价值对象,以及它们的区别对待方式?在我看来,域对象基本上代表您的业务领域的名词,并且具有标识,而价值对象对业务没有任何特殊意义(想想MonetaryAmount)并且没有身份。来自: 实体“这是我的实体,有很多类似的实体,但这一个是 我的” 实体的关键定义特征是它具有 标识–它在系统中是唯一的,没有其他实体,没有 无论同一实体有多相似,除非它具有相同的身份 身份可以在实体上以多种方式表示–它可以是 数字标识符

我是DDD新手,正在努力理解其中的一些概念。您如何确定域中哪些对象是实体对象,哪些对象是价值对象,以及它们的区别对待方式?

在我看来,域对象基本上代表您的业务领域的名词,并且具有标识,而价值对象对业务没有任何特殊意义(想想MonetaryAmount)并且没有身份。

来自:

实体“这是我的实体,有很多类似的实体,但这一个是 我的”

实体的关键定义特征是它具有 标识–它在系统中是唯一的,没有其他实体,没有 无论同一实体有多相似,除非它具有相同的身份

身份可以在实体上以多种方式表示–它可以是 数字标识符(经典的CustomerID),它可以是Guid( 经典…哦,没关系),或者它可能是一把自然钥匙(比如 客户编号您的CRM系统在客户 第一次从你那里买的)

无论您选择哪种表示方式,实体都由 有身份的

值对象定义值对象的关键特征是 它没有身份。好吧,也许有点简单化,但是 价值对象的意图是通过它的 仅属性。两个VO可能具有相同的属性,在这种情况下 它们是相同的。但是,它们没有任何价值,除了 由于他们的属性

VOs的另一个共同点是,它们可能 不可变,一旦创建,就不能更改或更改。你可以 创建一个新的,因为他们没有身份,这是一样的 就像换另一个一样

想一想在一个汽车类中,在一个汽车工厂系统中的应用(没有车牌)。即使两辆车相等(相同的型号、发动机、颜色、重量等),每辆车都是独一无二的,并且可以通过身份来区分

两辆车可以相等,因为它的属性
Car1。相等(Car2)
,但不是同一辆车,因为它的VIN
Car1!=Car2
。如果一辆车改变了它的颜色,它就不是其他车,而是具有其他属性的同一辆车。这是一个实体

现在,考虑一下带有
name
RGB
字段的颜色类别(适用于汽车)。青色在名称中有“青色”和
R=0 G=255 B=255
。不需要其他标识字段,因为它的属性是它的标识。颜色是VO,必须是不可变的,因为更改名称或RBG(或两者)表示其他颜色。。。或者,如果名称和RGB不匹配,则会出现错误;)

Color1.equals(Color)
Color1==Color2
必须始终具有相同的结果。

我认为实体==“thingy that as a noun”是对域建模的一种非常简单的方法。价值对象对企业有着非常特殊的意义。如果您进行货币兑换,MonetaryAmount可能意味着非常特殊的东西,但它仍然是一个价值对象。找到了一个很好的解释