是否通过根追溯到内部对象?

是否通过根追溯到内部对象?
比如:
A B C 三个 entity,那么A为根 还伴有一个 D是A的仓储
那么,得到B 和 C 是不是通过根A ?

这个问题,就DDD来说,答案是肯定的。

关键是为什么要这样做。领域驱动设计这种方法论,是软件开发进化的产物。它的重要意义我觉得有两点,一是将软件设计的重心回归到解决客观世界问题本身。二是提供一系列的具体处理方法以保障软件设计向软件实施平滑过渡。

而通过聚合根小心翼翼的获取和处理聚合内部成员是领域驱动设计这一方法论所倡导的,是上面两点重要意义的具体体现。这样做的目的是保证领域设计模型的纯洁,不让设计实现者随意插入破坏模型的代码。因为设计建模后的产物——软件模型不是那个人独有的,而是软件开发参与者共享的。所以保证模型的明确、模型的稳定对于多人开发团队来说至关重要。

这里我再引述一下我举得一个例子:

聚合根是老大,它将它周围那些“小卫星”视为己物,不容别人侵犯。举个例子。美女是个聚合根,她住在A处。你和美女交谈,死缠烂磨知道她住在A处。然后你私底下将美女住在A处告诉你的死党,结果一传十就传开了。问题是传的过程中,某人传错了,把美女住在A处说成B处。居委会居然采纳这种流言,将美女住在B处登记在案。事实上,我们的程序很可能就是那个不分青红照白的“居委会”。

要解决这个问题两点,一是美女根本就不随意外传她的住地。居委会要知道美女地址只能问美女。二是,美女告诉你住地后发表声明,大概意思是,她与你的谈话最终解释权归美女,谈话完毕,你把A地说成任何地点都与她没有关系(也就是给了个地点对象拷贝)。

最后,我的观点是:

知道原因后,就可以结合项目实际,采取合适的措施。例如,你能保证我直接获得聚合体内部成员,而不会破坏设计模型。或者破坏设计模型根本就无所谓,代码编写效率最重要。那么,你就可以随意获得、修改聚合体内部成员。此正所谓“随心所欲不逾矩”。
[该贴被showerxp于2011-04-24 17:08修改过]