【问题标题】:Bypassing Aggregate Root绕过聚合根
【发布时间】:2023-03-15 09:30:01
【问题描述】:

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

编辑:

这是一个例子

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

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

这有意义吗?

编辑:

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

【问题讨论】:

  • 你能举个例子吗?

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


【解决方案1】:

Evans 说“根是 AGGREGATE 中唯一允许外部对象持有对...的引用的成员”(第 127 页)

我的理解是聚合应该作为一个单元出现在外部对象中。此外,Law of Demeter 似乎也适用。归根结底,我不认为这是可以接受的。

【讨论】:

  • 是的,你是对的。我的设计违反了一些法律。我可能需要阅读 Evan 的 DDD 书。它可能会对我有很大帮助。谢谢
【解决方案2】:

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

“冷静下来,伙计。试着阻止自己打破规则。但是,嘿,不要因为它而自责。DDD 摇滚老兄,但如果你真的需要打破 Agg 规则。是的,和平。 "

见: “埃里克·埃文斯:从这本书开始我对 DDD 的了解” http://dddcommunity.org/library/evans_2009_1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多