Gop*_*pal 1 entity domain-driven-design object
我目前正在使用DDD方法设计Web应用程序.在区分实体和值对象时,我遇到了一个这样的模型元素,我无法决定将其置于Entity/VO类别下.
每个订单将与1和仅1个评论历史对象相关联,该对象管理评论列表.现在,当编辑订单时,用户可以添加评论.这会附加到评论历史记录中.
评论历史对象本身并不意味着持久性.我打算使用nHibernate"组件",因此只有注释列表才能写入ORDER_COMMENTS表.
订单是一个实体.
评论历史(各种用户的评论附加在订单中)应该是实体还是VO?
CommentHistory是一个实体.
因为您向其添加注释而不是每次更改时替换整个历史记录.
这意味着 - 它可以修改.
如果它是可修改的,它必须具有一个标识,一个已知的"挂钩",你可以"悬挂"状态变化.
如果它具有独立于州的身份,则它是一个实体:
实体:
不是由其属性定义的对象,而是由连续性线程及其标识定义的对象.
相反 - 值对象由其状态标识.如果它们由状态标识,那么,如果状态发生变化,则它已经是另一个对象.对象改变自己身份的能力将是太多的自由,最终会导致混乱.这导致了价值对象应该是不可变的结论(它们的状态每个结构只定义一次).
这是另一个例子:
假设Citizen就像评论一样.公民被"追加" Country.如果国家是一个价值对象,每当新公民出生时,整个国家都需要重建.