我的VS项目有域驱动设计问题

时间:2018-02-07 09:12:14

标签: c# visual-studio design-patterns asp.net-core domain-driven-design

我正在处理一些需要整理的架构设计问题。我目前的架构如下所示。每个盒子都是visual studio中的一个项目,它们共同构成了解决方案。

My Core应用程序在WestCore.AppCore Context中编码,我有另一个名为CSBINS的项目组(包括系统Web服务集成)CSBINS是一个商家产品,这就是为什么我发现将它分离到另一个项目更好的原因将它与WestCore.AppCore中最常用的接口相依赖。

现在WestCore.Api中没有任何逻辑。所有应用程序逻辑都在AppCore和AppCore.Csbins

中处理

问题是我有时需要在WestCore.AppCore中使用WestCore.AppCore.Csbins服务,这会导致交叉引用问题。

现在最好的方法是将Endpoint Services添加到WestCore.Api并将跨平台逻辑移动到Endpoint Services。

然而,我想得到有关进一步研究的建议和设计问题,因为我非常确定会有很多设计选择。

我也在考虑将常见的AppCore接口和类移动到WestCore.AppCore.Common,以便我不需要将整个WestCore.AppCore项目引用到WestCore.AppCore.Csbins。

Application Architecture

1 个答案:

答案 0 :(得分:3)

为什么在其他服务中使用服务 - 这可能是一件坏事,需要重构。

那些CORE项目看起来像是应用程序服务项目,它可能有助于称它们为“WestCore.ApplicationServices”,Core暗示它属于域级别。

听起来您需要使用反腐败层来与第三方供应商集成,而不是创建一个全新的“域”上下文。这应该像修改域层中的接口一样简单(我个人使用* Gateway后缀来识别与外部系统交互的接口)

我不了解您的域名,我可能会从这样的事情开始:(我假设csbins是某种支付或会计网关)

rough architecture sketch indicating csbins domain project may not be required

此外,我强烈建议在域级别避免使用“通用”和“共享”库,您不应该需要它们。您的接口和类是DOMAIN对象,属于您的DOMAIN库。 Application Services应该直接使用域模型,并通过依赖注入提供域接口的实现。希望您的域模型充实,您的应用程序服务类只是编排包装。