【问题标题】:Global access to objects; When to use Domain Driven Design Repositories全局访问对象;何时使用领域驱动设计存储库
【发布时间】:2013-09-18 15:56:14
【问题描述】:

我一直在遵循 DDD 原则(遵循 Eric Evans 关于该主题的书)但是我最近开始重新阅读这本书并注意到我似乎偏离了 repositories 的原则之一...

"对每一种需要全局访问的对象,创建一个对象 这可以提供内存中集合的错觉......”

我偏离了这一点,因为我为每个 aggregate 创建了一个repository,并发现这很适合我。即使aggregate 本身与另一个aggregate 关联,在创建entity 期间(通常在工厂内)引用关联聚合的repository 也是一件简单的事情。

我发现这样做的好处是在我的存储库中执行诸如缓存之类的操作时。它还真正简化了对象创建/持久性与域之间的划分。

谁能给我一个例子说明这种“全球访问”不适合帮助我了解我哪里出错了。

【问题讨论】:

  • 全局访问意味着只有聚合根可以被系统的其他部分引用,而本地实体不能。这旨在保护不变量。如果有人想修改本地实体,他/她必须通过检索聚合并使用它来修改实体来做到这一点,因此不变量(由聚合提供)是有保证的。
  • +1 “全局访问”定义了聚合根,而不是只有根才能访问的简单实体。此外,您提到了包含聚合的聚合。这在 DDD 中是非常不典型的,如果不是不鼓励的话。
  • 您能否再澄清一下您的问题?例如,“我哪里出错了”是什么意思?有代码吗?

标签: java domain-driven-design ddd-repositories


【解决方案1】:

我认为您使用了错误的术语...聚合不能包含其他聚合。您可能在这些聚合之间存在关联。

无论如何,每个聚合都应该有存储库,否则你做错了什么。此外,最好使用存储库来加载聚合而不是来自其他聚合的关联。如果您保留关联(可能是因为您的 ORM 使关联变得容易),那么您并没有完全拆分聚合。

【讨论】:

  • 感谢@gseric,我接受你关于作文的评论,并同意aggregates 之间只能有association。我已经适当地编辑了帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
相关资源
最近更新 更多