OweJDao
2011-01-23 23:23
SpeedVan,有很多问题,我现在写也写不出来,你已经帮我理清了很多思路,我留下qq请教好嘛?qq 512668804

janwen
2011-01-25 10:19
2011年01月23日 02:44 "SpeedVan"的内容
在DDD中这是不认同的。判断值对象是否是同一个,是通过比较值对象当中的每一个值是否相等,而不是比较Id。 ...

这个是真的吗?我一直对值对象和实体对象的应用和设计很迷惑

SpeedVan
2011-01-25 10:45
2011年01月23日 23:23 "OweJDao"的内容
这个是真的吗?我一直对值对象和实体对象的应用和设计很迷惑 ...

呵呵,其实值对象离我们很近的,String str = "123";"123"就是值对象,而在String pool中,如何得知是否已经存在"123"呢?就是比较值,若果已经存在则返回已经存在的"123"的引用。当然我们也可以为我们的值对象建立池,不过这是flyweight的优化做法,不是十分必要的话,偷懒了不写了o(∩_∩)o ,但若果效率不好,这就是一个优化的地方。

由此也带出了值对象的不可改变性(immutable),其实这里的值对象就是实体属性的值而已,意义上跟"123"同级,可以说目的在于状态属性的规划化。而实体中所有值对象的聚合根是实体状态(这其实也是一个值对象)。

OweJDao
2011-01-25 13:27
我也不知道怎么来描述我的问题呢,因为他涉及到很多很细的职责分配,比如说我现在想比较两个区域是否相交,这个职责是不是应该在区域里面呢,区域内聚了形成区域的点,显然这是她的职责,但是现在比较两个区域是否相交,却要借助于第三方图形API实现,这样领域耦合第三方API。

谢谢SPEEDVan的帮组,我还是自己寻找答案吧,好好看看J道的论坛的代码吧

[该贴被OweJDao于2011-01-25 15:25修改过]

SpeedVan
2011-01-26 01:45
两个区域是否相交,是一个策略技术问题,这里就用到设计模式中的策略模式,你就试想你的“相交判定策略”是一个算法,你现在已经把算法封装好了,所以这里就可以松耦合了(注意业务与策略的区别)。至于这里的策略执行者,有两种观点,也就是jdon帖子经常出现的:交给实体,还是外界,我个人认为在这个案例下,出于方便可选第一种,出于更准确描述选用二种。

呵呵,你能说出问题,我就抽时间尽量回答。关于职责分配,可以看看banq的这个帖子对象的责任与职责

猜你喜欢
2Go 上一页 1 2