Visual Studio - DDD模块和洋葱

时间:2015-12-01 20:01:31

标签: c# visual-studio domain-driven-design onion-architecture

我正在开发遵循DDD和Onion Architecture概念的C#应用​​程序,但我无法实现如何分离代码:

  1. 我希望它由模块 - 有界上下文分隔 - (即销售;供应商;客户)
  2. 我希望它按层分开(即核心;服务)
  3. 我们会想到以下内容:每个模块一个项目和每个模块一个文件夹(具有唯一的命名空间)。例如:

    项目核心

    • 文件夹销售
    • 文件夹供应商
    • 文件夹客户端

    项目服务

    • 文件夹销售
    • 文件夹供应商
    • 文件夹客户端

    但是,我认为我可以反过来:每个模块一个项目,每层一个文件夹。

    我不知道是否有更多方法。

    谢谢。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

基于我上次的DDD项目,我得到了以下内容:

  • 您的域模型的1个项目。 (根据有限的背景)因为在DDD中,每个人都说同一种语言/模型,这使得它成为一个项目。

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

  • 从每个图层中的1个项目开始,并根据需要重构。 假设您的方法具有某种敏捷性,则无需提前布置整个项目结构。就像你可以重构类,重构项目一样。请记住以下内容

1)项目是否有自己的存在理由。例如,汽车有理由存在,我可以买一辆,更换一辆等。发动机部件没有理由存在于它自己的上面。除非我有匹配的车,否则我从不买它。

2)避免此命名空间中的#34;太少的类"来自代码分析的警告。如果我在每个品牌中只有几种类型的汽车(并且不会处理许多个别汽车零件)将整个品牌整合到一个项目中

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

随着项目的增长,您的解决方案的复杂性也会随之增长。虽然我已经看到100个项目的解决方案,我很少看到它的工作。对于项目超过100(项目可能更多)的项目也是如此。

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

更新查看项目的代码图。如果它讲述了一个有意义的故事,那么你就是好的。如果它没有试图找出需要改变的东西。