2

这里是我的问题:我使用的EntityFramework 4.1型号第一,我有两个组件(域和存储)实体框架和DDD

域中有我所有的业务逻辑 存储管理所有的持久性逻辑数据库

所以我不想在我的域中有任何实体框架查询。我使用存储库来公开商店。 Hic!我的edmx位于商店中,因此也生成我的商业类的TT。因为我想在程序集的域中使用我的业务类,所以我将TT移入了域并更改了代码生成器的名称空间。我必须引用我的商店来了解我的域类(逻辑!)。但是如何在不创建循环引用的情况下从我的域调用我的存储库...?

摘要:

  • 我店里参考域知道业务类。
  • 我的域参考商店知道仓库

回答

4

你需要一个仓库接口在您的领域层。然后,存储库实现位于您的基础架构层中,并使用EF。这样,您的基础架构层依赖于您的域层(通过实现存储库接口以及创建/检索域实体),但该域并不依赖于基础架构层。

这个一般建筑模式的一个很好的解释在Jeffrey Palermo's articles on the "onion architecture"给出。

+0

好吧,它很酷,它似乎保持道路。但是现在我怎样才能从我的域名中调用我的存储库?我只知道接口层... – Francis

+0

依赖注入!如果'DomainThingyManipulator'需要访问版本库,它的构造函数需要一个'IThingyRepository',而在一些“合成根目录”中,你用'新的DomainThingyManipulator(新的ActualThingyRepository())'将这两个图层连接起来。这本身就是一个整体话题,值得借鉴。 – Domenic

+0

你认为Microsoft Unity容器可以完成这项工作吗?非常酷,谢谢你:-)! – Francis