具体例子是,如果一个账户(entity)拥有多个地址,比如Amazon这类的网站都可以设立多个地址,有的是付款地址,有的是有机地址,有的还可以使多个认证后的有机地址(朋友家的,或者送礼的),当这些地址出现后,你在删除其中一个的时候,势必需要去具体操作一个Value Object,这种情况下如何做!?
谢谢各位先,
具体例子是,如果一个账户(entity)拥有多个地址,比如Amazon这类的网站都可以设立多个地址,有的是付款地址,有的是有机地址,有的还可以使多个认证后的有机地址(朋友家的,或者送礼的),当这些地址出现后,你在删除其中一个的时候,势必需要去具体操作一个Value Object,这种情况下如何做!?
谢谢各位先,
如果多个账户有相同的地址,那就直接引用这个地址值对象就可以了。节省内存 提高性能~~~ 我自己的体会还请高手发言~
我希望各位在回答问题之前,先看清楚我的问题,谢谢。
banq你好,那我请问一下,在这个帖子里面,很明显,在一个人引用照片的时候,这个照片的引用还是需要维护的,比如删除这个引用的,那为什么你有建议她是用值对象呢?
谢谢
[该贴被lonelybug于2009-12-03 13:19修改过]
引用维护可以将引用彻底全部删除,或全部重新建立,这是符合值对象引用,如果你想对引用集合中个别引用进行维护,有针对性的维护,那就不是值对象了。
是不是值对象很少出现一对多的现象,大部分都是一对一的,就是一个Entity拥有一个Value Object来描述一个类型的属性。
却很少出现一个Entity包含一组Value Object来描述一个类型的属性,就如同所举的例子。
因为按照需要指导那个是那个的原理的话,很难维护多个Value Object,除非是那些Value Object一旦生成了,在这个Entity的生命周期内不需要被维护的,比如,做删除操作,更新才作,而只是可以不断的添加和提取。
也就是说,如果单一的Value Object我们可以通过一个Set方法来进行替换已有的,但是,如果出现一组Value Object,我们除非替换整组的Value Object,否则的话,只能做添加操作。
有点罗嗦,不知道各位可以看懂么!
谢谢热心人跟贴。
很好地想法,我们通过做成一对一关联,强调值对象集合是一个整体。这属于值对象的最佳实践吧。
简单的例子:
查询订单并显示到前台。
这里查询到的订单其实就是值对象,虽然我们可能用某个实体类去映射了查询结果,
但它仍然是值对象。
但是如果你要修改其中的查询结果,那就是实体了(现实是我们会构造一个实体去保存,或者根据实体的标示去保存)。
Value Object一样需要最终被存储的,我不知道你学习DDD的时候看书不看书呢?
Value Object和Entity都是需要最后被存储的,而且,你举的例子实在是太不准确和不恰当。
我还能说什么呢?有的时候觉得在这里讨论这样的话题真的很累,很无聊。