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

Should I use separate projects for bounded contexts in DDD .NET?

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

为每个限界上下文使用单独的项目是否有直接的缺点?

欢迎对我们的方法提出任何想法和建议。

所以它看起来像:

- 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

我们正在考虑让一些限界上下文只能通过 Web 服务访问,以允许可能获得大量流量的区域的可扩展性。

您所展示的似乎更像是解决方案体系结构的分层方法,将表示层、应用程序层、域层和基础结构层分开。这些将是同一解决方案中的独立项目(我是一名 C# 开发人员,所以我认为 Visual Studio)。

我认为使用单独的解决方案是隔离有界上下文的正确做法。那就是如果您沿着将应用程序和持久性问题映射到有界上下文的路径前进。如果为 true,不同的团队可以处理每个应用程序,而无需在同一解决方案中操作 space。

希望对您有所帮助...

这个问题的答案并不像最初看起来那么简单。这是因为有不同的方法来集成 BC。

This question (and answer) 问题总结得很好:

One approach is to consider the whole application a BC, and the other is to only consider the domain logic a BC.

为了回答你的问题,我们必须明确区分两者。

案例 1:BC 表现为整个应用程序

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

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

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


要将此应用于您的案例,我认为您的建议是一个很好的起点。如果解决方案变得太大,您可以稍后将用户的东西移出并将其移至专用解决方案中。 这里重要的是要有明确定义的 BC 边界和接口。这样以后搬东西就方便多了。