Entity framework 4 实体框架与DDD

Entity framework 4 实体框架与DDD,entity-framework-4,linq-to-entities,domain-driven-design,Entity Framework 4,Linq To Entities,Domain Driven Design,这是我的问题:我首先使用EntityFramework 4.1模型,我有两个程序集(域和存储) 域包含我的所有业务逻辑 存储管理数据库的所有持久性逻辑 因此,我不希望在我的域中有任何实体框架查询。我使用存储库来公开存储。呃!我的edmx在商店里,所以生成我的业务类的TT也在商店里。因为我希望我的业务类位于程序集的域中,所以我将TT移到了域中,并更改了代码生成器的名称空间。我必须参考我的商店来了解我的域类(逻辑!)。但是如何从我的域调用我的存储库而不创建循环引用 总结: 我的店铺参考域名,了解业

这是我的问题:我首先使用EntityFramework 4.1模型,我有两个程序集(域和存储)

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

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

总结:

  • 我的店铺参考域名,了解业务类
  • 我的域引用存储了解存储库
在域层中需要一个存储库接口。然后,存储库实现位于您的基础架构层,并使用EF。这样,基础结构层依赖于域层(通过存储库接口的实现和域实体的创建/检索),但域不依赖于基础结构层


这一总体建筑模式的一个很好的解释见。

好吧,它很酷,似乎能保持道路的畅通。但是现在我如何从我的域调用我的存储库呢?我只知道接口层…依赖注入!如果
DomainThingyManipulator
需要访问存储库,它将在其构造函数中使用
IThingyRepository
,并在某些“合成根”中使用
newdomainthingymanipulator(new ActualThingyRepository())将两个层缝合在一起。这本身就是一个值得学习的话题。你认为微软Unity容器可以完成这项工作吗?很酷,谢谢:-)!团结会很好!只要记住尽可能多地使用依赖注入(使用构造函数参数),而不是使用服务位置(
myContainer.Resolve()
)。不过,两者都是一大进步!