我正在开发遵循DDD和Onion Architecture概念的C#应用程序,但我无法实现如何分离代码:
我们会想到以下内容:每个模块一个项目和每个模块一个文件夹(具有唯一的命名空间)。例如:
项目核心
项目服务
但是,我认为我可以反过来:每个模块一个项目,每层一个文件夹。
我不知道是否有更多方法。
谢谢。
答案 0 :(得分:4)
在VS中运行良好的一种方法如下:
答案 1 :(得分:3)
基于我上次的DDD项目,我得到了以下内容:
您的域模型的1个项目。 (根据有限的背景)因为在DDD中,每个人都说同一种语言/模型,这使得它成为一个项目。
使用解决方案文件夹分隔图层(如提到的Dmi)
从每个图层中的1个项目开始,并根据需要重构。 假设您的方法具有某种敏捷性,则无需提前布置整个项目结构。就像你可以重构类,重构项目一样。请记住以下内容
1)项目是否有自己的存在理由。例如,汽车有理由存在,我可以买一辆,更换一辆等。发动机部件没有理由存在于它自己的上面。除非我有匹配的车,否则我从不买它。
2)避免此命名空间中的#34;太少的类"来自代码分析的警告。如果我在每个品牌中只有几种类型的汽车(并且不会处理许多个别汽车零件)将整个品牌整合到一个项目中
3)查看单个项目层次结构是否适合解决方案资源管理器中的屏幕(或2)。 一旦开始搜索类,您就知道项目中存在的类,然后考虑拆分项目。例如,汽车可以按品牌分开。
随着项目的增长,您的解决方案的复杂性也会随之增长。虽然我已经看到100个项目的解决方案,我很少看到它的工作。对于项目超过100(项目可能更多)的项目也是如此。
如果你把它放在那些你可能安全的地方之间。
更新查看项目的代码图。如果它讲述了一个有意义的故事,那么你就是好的。如果它没有试图找出需要改变的东西。