3

在每天学习 10 多个小时的领域驱动设计一周后,我开始觉得自己开始很好地理解它,直到今天读到这篇文章:

http://blog.fedecarg.com/2009/03/15/domain-driven-design-the-repository/

那篇文章的作者说您将存储库注入到域对象中,这对我来说没有任何意义。

我不是这个主题的专家,但我认为他是错的,但我想从这里的一些人那里得到一些关于将存储库注入域对象是对还是错的意见。

上周我每天都在阅读,因为我阅读了另一篇文章,另一篇文章对我来说听起来都一样(这是一件好事),直到我看到我在上面发布的文章,如果我的这张照片让我三思而后行模式不正确。

您是否应该注入存储库?

4

1 回答 1

6

所示示例使用Active Record 模式。在这种模式中,实体知道如何自救。这通常不被认为是良好的关注点分离,因为该类知道两件事:数据属性如何保持自身。

将存储库注入 Active Record 对象比我见过的一些 Active Record 实现要好(因为您至少可以换出存储库实现),但在我看来(以及大多数 DDD 社区)依赖是向后的:

存储库应该依赖于它返回的对象,而不是相反。这样做的原因是您的“域对象”(稍后会详细介绍)可以存在(并且应该是可测试的)而无需加载或保存(即依赖于存储库)。

所以回答你的问题,不。您不应该将存储库注入域对象。

然而,值得注意的是,这并不是一个真正的领域对象,因为它没有行为——只是简单的 get/sets(访问器/突变器)。它只是一个数据传输对象 (DTO)。如果真的没有行为,你就不需要领域模型——它只是简单的 CRUD。

于 2013-01-16T21:01:05.817 回答