gpt4 book ai didi

.net - 我应该在组件中混合技术吗?

转载 作者:行者123 更新时间:2023-12-04 20:19:53 25 4
gpt4 key购买 nike

我有一个中型项目,它实现了大约 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从我的域层。
  • 我最终将切换数据访问和表示技术。
  • 在一天结束时,无论如何,主应用程序都将引用所有程序集。
  • 当按概念分组时,测试将去哪里?我是否不必将它们放在单独的程序集中以便它们不随程序一起提供?

  • 根据您的经验,哪种方法最好?

    最佳答案

    TL;DR :您应该两者都做,但不要仅仅为了它而将您的项目分成多个程序集。通过将您的程序集拆分为 可重用组件 您最终将在适当的情况下结合使用这两种方法。

    首先,我想说,根据项目的大小,可能不需要将概念或层分离到单独的程序集中 - 将代码分离到单独的程序集中的优点是双重的:

  • 允许其他程序集/应用程序通过引用您的程序集来使用您的代码
  • 通过拆分成许多较小的程序集来减小大型程序集的大小

  • 如果您不需要这两者中的任何一个(并且您将来也不需要),那么请保持简单的生活,将所有东西都塞进一个组件中。

    其次, 初级 将代码分离到单独的程序集中的原因是重复使用该代码 - 例如,如果您在 Windows 窗体应用程序中使用了一段处理逻辑,将其分离到单独的程序集中可以让您重新使用该逻辑控制台或 Web 应用程序。出于这个原因,我通常发现最好的方法是将概念分开,例如:
    Company.Project.Concept.dll

    其中“概念”是您想要重用的东西,无论是一组常见的 Windows 控件还是一些数据访问逻辑。

    请注意,当重用一个概念时,很少会想要重用该概念的所有概念层(域/演示文稿/WinForms)。通常,您的概念仅包含 1 层(例如某种形式的处理),或者在重复使用该概念时,您只对 1 层或可能的 2 层感兴趣。在这种情况下,如果您的“概念”程序集还包含其他额外的逻辑(例如 WinForms),您只是引用了永远不会使用的额外代码。出于这个原因,它的 还有如果你有概念层,通常将它们分离成概念层,例如:
    Company.Project.Concept.Processing.dll
    Company.Project.Concept.WinForms.dll

    IE。在你给出的例子中,我主张如果你想要9个程序集,而不是3个:
    MyProject.ConceptA.Domain.dll
    MyProject.ConceptA.Presentation.dll
    MyProject.ConceptA.WinForms.dll

    当然,将您的项目拆分为数百个程序集是完全没有意义的,除非这些单独的概念实际上将在其他地方使用,这让我回到我的第一点 - 除非您确实需要,否则不要打扰拆分程序集,或者把它另一种方式 将您的程序集拆分为有意义的可重用组件 :
  • 如果没有其他人打算使用您的 Windows 窗体控件,则不必费心将它们拆分为单独的程序集
  • 如果大多数人要同时使用 ConceptB 和 ConceptA,那么将它们组合成一个程序集
  • 如果大多数人想要一起使用域和表示层,请将它们组合成一个程序集


  • 作为一个工作示例,我自动选择将较小的项目拆分为两个程序集——应用程序本身包含所有“演示”(无论是 Web、WinForms、WPF 还是控制台应用程序),另一个程序集包含“内容”应用程序 - 您的应用程序公开的底层功能(例如图像处理、数据检索等...)。如果我想在不同风格的应用程序中公开相同的功能,这会有所帮助。

    再一次,尽管我会在组件太少而不是太多方面犯错 - 将一个组件一分为二比将两个组件重新组合成一个更容易。除非您能找到一个令人信服的理由将一个程序集/项目拆分为多个程序集,否则不要打扰。

    关于.net - 我应该在组件中混合技术吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7738800/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com