5

May be for some domain logic implementation entities need access to repo for update/delete of self or any related entity. Does this sound right ??

4

2 回答 2

6

不,它没有,至少对于带有“领域驱动设计”标签的问题。当然,Active Record 模式有权存在于某些系统中,并且有些人发现强耦合很有用,但在 DDD 中建议的方式是显式使用存储库:

Evans DDD,p.152:对于需要全局访问的每种类型的对象,创建一个对象,该对象可以提供该类型所有对象的内存集合的错觉。«...» 仅为实际需要直接访问的聚合根提供存储库。让客户专注于模型,委托所有对象存储和对存储库的访问。

因此,在 DDD 中,存储库不仅封装了访问数据库所需的基础架构代码,还封装了必须存储和加载对象的整个想法。

如果您正在执行一些涉及从数据库保存和加载的复合操作,那么具有对存储库的引用的服务是最佳候选者。

于 2012-08-05T18:38:58.753 回答
1

虽然实体能够访问自己的存储库以存储或删除自己肯定听起来很危险(请参阅持久性无知),但在某些特定情况下,我可以容忍实体异常地从存储库请求另一个聚合根,它没有已经持有参考。

但是,请注意,域实体应该只知道存储库的抽象(即驻留在域层中的接口),而不是它们的具体实现。因此,不要让域层引用基础设施层,而是在运行时在需要它们的地方注入具体存储库的实例。

无论如何,这不应该成为常态。

于 2012-08-07T12:34:44.427 回答