【问题标题】:Domain Driven Design领域驱动设计
【发布时间】:2011-10-06 18:24:59
【问题描述】:

我正在寻找关于 DDD 的以下 2 点的说明。

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

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

谢谢

编辑

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

此外,虽然存储库通常仅用于应用层,但也可以例外,并根据需要从域服务中调用存储库进行查询。但应尽可能避免这种情况,以便在我们的开发中实现同质化。

【问题讨论】:

    标签: domain-driven-design


    【解决方案1】:

    我不会设计域实体来引用存储库。 “存储库”很少是域的一部分,并且会在您的域模型中引入技术问题。我找到了最适合应用程序服务层的存储库。

    【讨论】:

    • 感谢您的回复。域服务呢?
    • 大卫,我倾向于认为任何需要存储库的服务都可能是应用程序服务。
    【解决方案2】:

    我不知道这种硬性规定。 任何事情都可以。

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

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

    【讨论】:

    • 您的第 1 点是我看待域对象的方式,但是在您的第 2 点上,当您谈论服务时,您是在专门谈论应用程序服务吗?如果是这样,域服务呢?
    • Eric Evans DDD 架构建议采用以下分层方案,UI、应用程序、域和基础设施在 DDD 中各有不同的职责。出于不同的原因,服务可以存在于所有这些层中。您的建议似乎是 Eric 所描述的应用程序层。域层是您的域对象和服务所在的地方,我只是不确定域服务是否应该真正使用存储库接口,尽管在我的脑海中我不明白为什么他们不会,否则它会推动很多领域关注点进入应用层。
    • 命名法太多。教条的味道。我非常喜欢这本书,但它本可以使用更好的编辑器。而且我不知道它让世界着火了。