在NLayered DDD(域驱动设计)中层如何相互通信

时间:2012-02-09 13:17:02

标签: domain-driven-design

我们正在尝试为我们的新项目调整DDD。 我们使用Microsoft DDD Nlayer作为示例项目。 这更多是DDD问题,而不是Microsoft Nlayer DDD。 我知道在DDD中你假设只从Application层调用Data层而不是形成Domain层。但是在文档中它还说你仍然可以从域层调用数据层(仍然可以避免它)。我怎样才能做到这一点?当我尝试在Visual Studio中添加Domain层的数据层引用时,它说'添加此项目作为参考将导致循环依赖。 我知道我们可以在应用程序层获取数据,然后将其传递给域层,但事实并非总是需要根据逻辑获取数据。 如果我无法访问数据,我可以在域层中使用什么逻辑?大多数时候逻辑将基于另一个类及其数据(在同一域或不同域内)。 请指导我。这是我不知道层应该如何相互交谈的无知。

1 个答案:

答案 0 :(得分:1)

这不是软件(至少OLTP类)的工作原理。想一个用例,想一想所涉及的对象。事先查询所有数据。使用数据实例化对象。让对象协作以执行用例。保存更改的对象的数据。

以下示例:

public class IncludePhotoInPortfolioHandler {
  public void Handle(IncludePhotoInPortfolio useCase) {
    var photo = _photoRepo.GetById(useCase.PhotoId);
    var portfolio = _portfolioRepo.GetById(useCase.PortfolioId);
    portfolio.Include(photo);
  }
}

如果你一次改变了太多的物体,你做错了。你会遇到各种令人讨厌的问题。在奇怪的情况下,您需要根据驻留在对象中的标识符来获取数据/对象,以某种方式公开这些标识符并使​​用它们来获取相关对象。

提示:您可能希望在蓝皮书中阅读DDD,而不是在这个NLayered DDD项目中坚持下去。不要将图层放在基座上。