Visual Studio - DDD 模块和洋葱

Visual Studio - DDD Modules and Onion

我正在按照 DDD 和 Onion Architecture 概念开发 C# 应用程序,但我不知道如何分离代码:

  1. 我希望它由模块分隔-有界上下文-(即销售;供应商;客户)
  2. 我希望它按层分隔(即核心;服务)

想到执行以下操作:每层一个项目,每个模块一个文件夹(具有唯一的命名空间)。例如:

核心项目

项目服务

不过,我想我可以反过来做:每个模块一个项目,每层一个文件夹。

不知道还有没有更多的方法。

谢谢。

一种在 VS 中运行良好的方法如下:

  • 为每个模块创建一个项目。这是一种自然的方法,因为项目之间有明确的依赖关系。
  • 使用解决方案文件夹将项目分组到层中。您可以在层前加上一个数字,以便它显示在在 visual studio 内订购。请注意,解决方案文件夹是虚拟的,即在文件系统中不可见,但这通常不是问题。

根据我做的最后一个 DDD 项目,我得出以下结论:

  • 1 个领域模型项目。 (每个限界上下文)因为在 DDD 中,每个人都说同样的话很重要 language/model 将其纳入 1 个项目。

  • 使用解决方案文件夹来分隔图层,(如提到的 Dmi)

  • 从每层 1 个项目开始,然后根据需要进行重构。 假设您的方法具有某种灵活性,则无需提前布置整个项目结构。就像你可以重构类一样,重构项目。请牢记以下几点

1) 是否有一个项目有其存在的理由。例如,汽车有存在的理由,我可以买一辆,更换一辆等等。发动机零件没有理由单独存在。除非我有匹配的车,否则我不会买它。

2) 避免代码分析中的"Too few classes in this namespace" 警告。如果我在每个品牌中只有几种类型的汽车(并且不处理许多单独的汽车零件)将整个品牌放入一个项目中

3) 查看单个项目层次结构是否适合解决方案资源管理器中的一个屏幕(或 2 个)。 一旦您开始搜索 a类,您就知道它存在于一个项目中,然后考虑拆分该项目。例如汽车可以按品牌分开。

让解决方案的复杂性随着项目的增长而增长。虽然我见过 100 个项目的解决方案,但我很少看到它起作用。超过 100 个的项目也是如此(项目可能更多)类.

如果你把它放在那些之间,你可能是安全的。

更新 看看你项目的代码图。如果它讲述了一个有意义的故事,那么你就很好。如果它不尝试找出需要更改的内容。