Domain driven design 领域驱动设计

Domain driven design 领域驱动设计,domain-driven-design,Domain Driven Design,我想澄清以下关于DDD的两点 1.域实体可以调用存储库吗 2.域服务可以调用存储库吗 谢谢 编辑 找到了一套详细描述DDD层的文档,它就是这么说的 此外,尽管作为一项规则,存储库仅从应用程序层使用,但也可以进行例外,并根据需要进行查询,从域服务调用存储库。但是为了在我们的开发中实现同质化,应该尽可能避免这种情况。我不知道有这么严格的规则。什么都可以做 但我是这样做的。我不知道它是否符合DDD: 通常域对象不调用存储库。他们不需要知道它们是否被持久化 服务协调域对象和存储库以实现用例。他们拥有工作

我想澄清以下关于DDD的两点

1.域实体可以调用存储库吗

2.域服务可以调用存储库吗

谢谢

编辑

找到了一套详细描述DDD层的文档,它就是这么说的


此外,尽管作为一项规则,存储库仅从应用程序层使用,但也可以进行例外,并根据需要进行查询,从域服务调用存储库。但是为了在我们的开发中实现同质化,应该尽可能避免这种情况。

我不知道有这么严格的规则。什么都可以做

但我是这样做的。我不知道它是否符合DDD:

  • 通常域对象不调用存储库。他们不需要知道它们是否被持久化
  • 服务协调域对象和存储库以实现用例。他们拥有工作单元并管理事务

  • 我不会设计一个域实体来引用存储库。“存储库”很少是域的一部分,它会在域模型中引入技术问题。我发现存储库最适合应用程序服务层。

    你的观点1是我对域对象的看法,但是在你的观点2中,当你谈论服务时,你是专门谈论应用程序服务吗?如果是,那么域服务呢?Eric Evans DDD architecture建议采用以下分层方案,UI、应用程序、域和基础架构在DDD中都有各自不同的职责。由于不同的原因,服务可以存在于所有这些层中。您所建议的似乎是Eric所描述的应用程序层。域层是您的域对象和服务所在的层,我只是不确定域服务是否应该实际使用存储库接口,尽管在我看来,我不明白为什么它们不会使用存储库接口,否则会将许多域问题推到应用层。太多的术语。有点教条的味道。我很喜欢这本书,但它本可以用一个更好的编辑。我不知道这会让全世界为之疯狂。谢谢你的回复。域服务呢?David,我倾向于认为任何需要存储库的服务都可能是应用程序服务。