我应该在DDD .NET中为有界上下文使用单独的项目吗?

时间:2016-02-06 00:20:13

标签: .net design-patterns architecture domain-driven-design

我们正在讨论如何实施域驱动设计。

为每个有界上下文使用单独的项目是否有任何直接的弊端?

欢迎所有关于我们方法的想法和建议。

所以它看起来像:

- ProjectA.dll (User Context Web Service)
    - References 
        - ProjectB.dll

- ProjectB.dll (User Context Domain)

- ProjectC (Web App)
    - References
        - ProjectD.dll
        - REST calls to ProjectA for User stuff

- ProjectD.dll (Product Context Domain)

- ProjectE.dll (Some Other Context)
    - Domain
        - Service
            - IService.cs
        - DTO
            - DTO A.cs
        - Entity
            - Entity A.cs
            - Entity B.cs
    - Repository
        - Repo.edmx

我们正在考虑制作一些只能通过网络服务访问的有界上下文,以便实现可能带来大量流量的区域的可扩展性。

2 个答案:

答案 0 :(得分:4)

这个问题的答案并不像最初出现的那样直截了当。这是因为有不同的方法来整合BC。

This question (and answer)很好地总结了这个问题:

  

一种方法是将整个应用程序视为BC,另一种方法是仅将域逻辑视为BC。

要回答你的问题,我们显然必须区分这两者。

<案例1:BC表现为整个申请

这种情况下,每个应用程序通常只有一个开发团队(扩展名为BC)。 因此,合适的VS解决方案和项目设置是为每个应用程序创建一个解决方案,并根据逻辑分层构建项目。

案例2:BC表现为域逻辑库

在这里,如果整个应用程序不是太大,将所有内容放在一个解决方案中是有意义的。否则,根据需要将支持BC提取到他们自己的解决方案中。这通常由团队组织推动。

要将此应用于您的案例,我认为您的建议是一个很好的起点。如果解决方案变得太大,您可以稍后将用户的内容移出并将其移动到专用解决方案中。 这里重要的是拥有明确定义的BC边界和接口。有了它,以后更容易移动。

答案 1 :(得分:0)

您展示的内容似乎更像是解决方案体系结构的分层方法,其中分离了演示文稿,应用程序,域和基础架构层。这些将是同一解决方案中的单独项目(我是C#开发人员,因此我认为就Visual Studio而言)。

我认为使用单独的解决方案将是隔离有界上下文的正确行动方案。如果您要将应用程序和持久性问题映射到有限的上下文中,那就是这样。如果是,则不同的团队可以在每个应用程序上工作,而无需在同一解决方案空间内运行。

希望有帮助...