Oop DDD:应该';国家';是值对象还是实体?
“国家”:DDD中的值对象或实体 无论哪种意见都值得赞赏 以及,在哪里存储国家名称/代码表? DB? XML? 在课堂上Oop DDD:应该';国家';是值对象还是实体?,oop,domain-driven-design,Oop,Domain Driven Design,“国家”:DDD中的值对象或实体 无论哪种意见都值得赞赏 以及,在哪里存储国家名称/代码表? DB? XML? 在课堂上 谢谢 如果您的域是地理域或政治域,那么它可能是一个实体,但在一般情况下,一个国家只是一个与地址等相关联的值。在这种情况下,在对象模型的上下文中,它只是一个值 至于存储,域模型并不真正关心。如果方便,您可以使用数据库,如果愿意,可以使用XML,如果您有与国家相关的行为,可以使用类。实体的一个特征是它有一个生命周期,即它随时间而变化。一个值对象没有。事实上,值对象应该是不可变的。
谢谢 如果您的域是地理域或政治域,那么它可能是一个实体,但在一般情况下,一个国家只是一个与地址等相关联的值。在这种情况下,在对象模型的上下文中,它只是一个值
至于存储,域模型并不真正关心。如果方便,您可以使用数据库,如果愿意,可以使用XML,如果您有与国家相关的行为,可以使用类。实体的一个特征是它有一个生命周期,即它随时间而变化。一个值对象没有。事实上,值对象应该是不可变的。所以要问你自己的问题是,“这个国家的目标会随着时间的推移而改变吗?” 区别实体和值对象的另一个方面是,具有相同属性的两个值对象是相同的。因此,如果你有一个名为“France”的国家的实例,它与另一个名为“France”的国家的实例是相同的,即使它们是两个不同的实例(为了本次讨论,假设这是国家的唯一属性)。想想大多数语言中的字符串,字符串“fubar”等于字符串“fubar”的另一个实例 另一方面,实体是不同的,即使它们具有相同的属性。一个名为“John Smith”的客户可能与另一个名为“John Smith”的客户不同 鉴于这些特点,你应该能够做出决定。因为只有一个“法国”,而且它不会随时间变化,所以它可能是一个价值对象——除非你的应用程序需要更多地跟踪一个可能随时间变化的国家。想象一下: 您有另一个实体-客户。
客户实体引用国家/地区对象。
您有两个实体实例,其中填充了具有相同值的国家/地区对象(即“法国”)
您正在从第一个实体(或第一个实体对象)中删除国家/地区对象
- 如果您也希望删除第二个实体对象的国家/地区
=>国家是一个实体对象 - 如果仅为第一个实体对象删除vant country
=>国家是一个价值对象