单独的项目或多个类文件… C#中的命名空间最佳实践

我正在创建一个库,用于我正在构建的应用程序。 我正在建立一个类似于下面的名称空间结构。

MyNamespace.Validation MyNamespace.Reports MyNamespace.Transactions MyNamespace.DataImport etc... 

最佳做法是为每个子命名空间创建一个包含多个项目的解决方案,或者为每个子命名空间创建一个包含多个类文件的项目? 谢谢。

两种方法都有利弊,您需要根据自己的情况亲自决定。

亲到多个项目:

  • 单独的程序集允许编译器提供更严格的指导,可能防止耦合蔓延。 这允许您更好地维护依赖项。
  • 可以根据需要在其他项目中加载单独的程序集,从而可以简化重用。
  • 单独的程序集可以防止不必要的代码被加载到进程中,因为它们是按需加载的。

多个项目的缺点:

  • 更复杂的部署,因为需要部署更多文件(次要)
  • 较慢的构建/编译,甚至可能加载多个程序集(次要)的加载时间

就个人而言,我认为在大多数情况下,优点远远超过缺点。 我通常会将我的命名空间拆分为单独的程序集,前提是它们不相关。 在你的情况下,你正在研究4个截然不同的概念,所以我的直觉是分裂是最有意义的。

我会说这取决于。

  • 首先,最好将每个类放在自己的文件中。
  • 如果你使用一个项目,我会为该项目中的每个命名空间创建文件夹,并将代码文件放在适当的文件夹中。
  • 执行上述操作后,Visual Studio将在正确的命名空间内自动创建新的类文件

我认为这里真正的问题是:

如果只使用一次,将所有内容放在一个项目中就有意义了。 但是,如果此代码可以重用,您应该考虑是否只重用此库的一部分(或一个子命名空间)。 如果答案是肯定的,我会将命名空间拆分为单独的项目,因此将来您只能包含所需的项目。

确切地决定如何分解你的解决方案是主观的 – 它实际上取决于你的代码的具体细节。

但是,有一件事是肯定的:维护多个组件有缺点! 本文特别擅长描述这些缺点,观察它们在开发时,编译时,部署时和运行时如何增加成本。

我使用尽可能少的组件,旨在单个组件,同时隔离域的易失性区域。 当多个程序集明显适合或需要时(并且它们通常特别是强制解耦),我会尽力将同时更改的接口分组到相同的程序集中。

我会选择多个项目的解决方案。

好处:
– 每个项目都可以是一个单独的dll
– 一个解决方案中的所有项目,便于在文件之间导航

我通常遵循模式,一个程序集是一个名称空间,DLL名称在名称空间中。 更容易找到要引用的DLL