绕过聚合根

时间:2009-07-13 20:05:52

标签: c# asp.net nhibernate domain-driven-design aggregate

是否可以从聚合中获取只读集合而无需通过root获取它?我的模型现在做了一些,我想知道这是否是可接受的设计。感谢

编辑:

这是一个例子

我有一个名为UserAccount的聚合根实体和另一个名为VideoStore的聚合根。用户可以拥有多个他们分开的商店,视频商店可以拥有许多用户。一个非常基本的多对多,但不是因为多对多桥表包含状态信息,所以它也必须是一个实体。所以,我有一个名为UserVideoStores的桥实体,它是聚合根VideStore的子代(一对多)。

现在,当用户登录时,我想查找他们分开的VideoStores并向他们显示该信息。我可以通过使UserAccount实体具有对聚合根VideoStores的子UserVideoStores的直接(一对多)引用来轻松实现此目的。这样做似乎更容易,然后必须使用HQL查询并从图的底部进行搜索,以找出用户所在的商店。

这有意义吗?

编辑:

我想出了一个解决方案,让我的模型更清洁。我没有直接考虑我的一些设计,而且我学会了如何更好地使用nHibernate来帮助我提出解决方案。感谢

2 个答案:

答案 0 :(得分:2)

埃文斯说“根是AGGREGATE的唯一成员,允许外部对象保留对...的引用”(第127页)

我的理解是聚合应该作为外部对象的一个​​单元出现。此外,Law of Demeter似乎也适用。最重要的是,我认为这是不可接受的。

答案 1 :(得分:2)

实际上,Eric已经改变了对聚合根规则严格性的看法 他最近说了些什么

“冷静的家伙。试着阻止自己违反规则的人。但是,嘿,不要殴打自己.DDD摇滚老兄,但如果你真的需要打破Agg规则。是的,和平。 “

请参阅:  “Eric Evans:自从这本书以来我对DDD的了解” http://dddcommunity.org/library/evans_2009_1