C# 绕过聚合根

C# 绕过聚合根,c#,asp.net,nhibernate,domain-driven-design,aggregate,C#,Asp.net,Nhibernate,Domain Driven Design,Aggregate,从聚合中获取只读集合而不通过根获取它可以吗?我的模型现在做了一些,我想知道这是否是一个可以接受的设计。谢谢 编辑: 这里有一个例子 我有一个名为UserAccount的聚合根实体和另一个名为VideoStore的聚合根实体。用户可以有多个分店,视频商店可以有多个用户。一个非常基本的多对多,但这不是因为多对多桥接表包含状态信息,所以它也必须是一个实体。所以,我有一个名为UserVideoStores的桥接实体,它是聚合根VideStore(一对多)的子实体 现在,当用户登录时,我想查找他们所在的视

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

编辑:

这里有一个例子

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

现在,当用户登录时,我想查找他们所在的视频商店,并向他们显示这些信息。通过使UserAccount实体直接(一对多)引用聚合根VideoStores的子项UserVideoStores,我可以很容易地做到这一点。这样做似乎更容易,然后必须使用HQL查询并从图的底部向上搜索,以找到用户所在的存储区

这有意义吗

编辑:

我想出了一个解决办法,让我的模型更干净。我没有直接思考我的一些设计,我学会了如何更好地使用nHibernate来帮助我想出解决方案。谢谢

Evans说“根是聚合中唯一允许外部对象保存引用的成员…”(第127页)


我的理解是,聚合应该作为一个单元出现在外部对象中。此外,这似乎也适用。总之,我认为这是不可接受的。

事实上,Eric已经改变了对聚合根规则严格性的看法。
他最近说了一些类似于

“冷静点,伙计。试着阻止自己违反规则。但是,嘿,不要因为它而自责。DDD摇滚,伙计,但是如果你真的需要的话,打破Agg的规则。是的,和平。”

见: “埃里克·埃文斯:我从书中了解到的DDD”

你能举个例子吗?是的,你是对的。我的设计违反了一些法律。我可能需要读埃文的DDD书。这可能对我有很大帮助。谢谢