域模型和存储库可以位于不同的dll中吗?

时间:2010-08-02 08:28:47

标签: domain-driven-design n-tier-architecture ddd-repositories

域模型和存储库可以在不同的dll中吗?

在3层架构中,我想我会将域模型放在业务层中 以及数据访问层中的存储库。

我感到困惑,因为我的理解是域模型使用存储库,而存储库应该从域模型返回对象,这将导致循环依赖。

我必须误解上述一个或多个概念。

任何澄清都会非常感激,因为这一直困扰我一段时间,谢谢。

1 个答案:

答案 0 :(得分:5)

我认为您根本不应该让您的域程序集引用您自己的应用程序中的任何内容。它应该是最里面的组件,它完全不知道外面的任何东西。它只是坐在那里,知道域逻辑。

您的域模型不应该使用存储库,应用程序服务应该。 (如果域实体实际上需要使用存储库,则应该从应用程序服务注入它。Some people would argue, that this should not be necessary though - 我也这么认为。)

尝试以这种方式查看:您拥有应用程序服务,这是您的客户端/前端/控制器可以使用域的主要方式。应用程序服务定义了可以在应用程序上执行的操作。

应用程序服务使用存储库加载它需要处理的域对象,在域对象上调用必要的方法并返回结果(如果操作返回结果)。域对应用程序服务或存储库一无所知。

以这种方式开始组织应用程序的好方法是查看这一系列博客文章:http://jeffreypalermo.com/blog/the-onion-architecture-part-1/

看看依赖注入,它可以帮助你解决其他问题,看起来,你会有一个循环引用。

询问您是否有任何疑问。