DDD中的UI层依赖性

3

我的当前项目组织方式如下:

  • Domain 层 -> 领域对象和仓库接口
  • Infrastructure 层 -> 仓库实现
  • Application 层 -> MVVM 模式下的服务
  • Presentation 层 -> 只访问 Service 层并使用 ViewModels 进行操作

我使用了一个 IoC 容器 (SimpleInjector)。我的 Services 在构造函数中接收一个 IRepository,例如:

public CustomerService : ServiceBase
{
   public CustomerService(ICustomerRepository repository, IUnitOfWork<CustomerContext> uow)
   {
     ...
   }
}

我的问题是:

为了在服务中注入一个仓库,我的表现层应该引用领域层。添加这个引用没问题吗?我的表现层难道不应该只引用基础设施和应用层吗?


2
对于IoC,您必须在Presentation层中引用所有层(因为它是唯一有效的IoC引导程序配置位置),因为引导程序需要知道具体实现(Infrastructure/DataAccess层)和接口(domain层)以进行绑定。 - Tseng
1个回答

2

没问题。

您需要从组合根(通常位于表示层)引用所有组件。

我知道一开始感觉有点奇怪,但您需要区分DLL依赖和硬类依赖。如果您的表示层依赖于DLL,则没有问题;但是,如果视图依赖于SQL存储库(例如),则不行。

我写了一篇关于此主题的博客文章,其中包含更多信息:

http://www.kenneth-truyers.net/2013/05/12/the-n-layer-myth-and-basic-dependency-injection/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接