【发布时间】:2011-10-12 10:41:28
【问题描述】:
我有一个中型项目,它实现了大约 20 个不同的概念。一开始,我选择根据概念层来组织我的程序集,如下所示:
MyProject.Domain.dll (References System.Data.Linq, etc.)
\ConceptA\
\ConceptB\
\ConceptC\
\...\
MyProject.Presentation.dll
\ConceptA\
\ConceptB\
\ConceptC\
\...\
MyProject.WinForms.dll (References System.Windows.Forms, etc.)
\ConceptA\
\ConceptB\
\ConceptC\
\...\
MyProject.App.exe (References all the above)
我最近在一本 DDD 书籍中读到,我应该根据它所代表的域概念而不是技术层对我的程序集进行分组,如下所示:
MyProject.ConceptA.dll (References System.Data.Linq, System.Windows.Forms, etc.)
\Domain\
\Presentation\
\WinForms\
MyProject.ConceptB.dll
\Domain\
\Presentation\
\WinForms\
MyProject.ConceptC.dll
\Domain\
\Presentation\
\WinForms\
MyProject.App.exe (References all the above)
从长远来看,我没有足够的经验来判断这两种方法。我想在复杂性和灵活性之间取得最佳平衡。我有一些让我感到矛盾的担忧:
- 按概念分组更容易找到我的代码,因为它都在一个地方。
- 按技术分组确保我不会从我的域层调用
MessageBox.Show。 - 我最终会关闭数据访问和表示技术。
- 最终,所有程序集都将被主应用程序引用。
- 按概念分组时,测试将在哪里进行?我不是必须将它们放在单独的程序集中,这样它们就不会随程序一起提供吗?
根据您的经验,哪种方法最好?
【问题讨论】:
标签: .net assemblies domain-driven-design project-organization