Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#名称空间/文件夹:什么时候组织太多/创建太多名称空间是不对的?_C#_Coding Style_Namespaces - Fatal编程技术网

C#名称空间/文件夹:什么时候组织太多/创建太多名称空间是不对的?

C#名称空间/文件夹:什么时候组织太多/创建太多名称空间是不对的?,c#,coding-style,namespaces,C#,Coding Style,Namespaces,我喜欢在开发、分组相关的*.cs文件时尽量保持条理性。这些文件一起放在自己的文件夹中: ->Project --->Enums --->Exceptions --->Extensions --->Providers --->Configuguration --->Design --->etc. Manager.cs 众所周知,默认情况下,Visual Studio会为每个文件夹创建一个新的命名空间: Company.Product.Enums

我喜欢在开发、分组相关的*.cs文件时尽量保持条理性。这些文件一起放在自己的文件夹中:

->Project
--->Enums
--->Exceptions
--->Extensions
--->Providers
--->Configuguration
--->Design
--->etc.
  Manager.cs
众所周知,默认情况下,Visual Studio会为每个文件夹创建一个新的命名空间:

Company.Product.Enums.MyEnumClass.cs
...
Company.Product.Exceptions.ExceptionBase.cs
etc.
这有优点…也有缺点

好的一面是,使用intellisense,了解程序集是如何设计的变得很简单:您可以看到所有的部分,并且只看到您想要的部分(相比之下,在一个名称空间中有每个单独的类、枚举、静态扩展类、业务实体、管理器、提供程序等)

缺点是…你最终不得不使用一堆真正的包含来获得编码

using Company.project.Enums;
using Company.project.Model;
using Company.project.Extensions;
...
etc.
这种工作方式有一些问题……扩展最为突出……这是其中一种情况,我很清楚我的工作方式不是很好(很容易忘记使用扩展,并且不知道已经有方法来做我想要的事情了……)

所以…一方面,我可以选择像我多年来一直做的那样保持组织性,允许Intellisense成为程序集的新用户快速了解其功能的方式,并将其包含在包含中…另一种方式是将所有内容放在一个命名空间中…并编写关于如何开始组装…(更高的成本/老实说,可能永远无法完成小项目等)

关于名称空间的官方MSDN文档没有给出建议:


因此,在我改变我的方式之前,我非常感兴趣的是其他人在做什么,以及为什么…你在做什么,确切地说为什么?

我认为你的组织方式不正确。不要按什么枚举/扩展等进行组织。按类型的使用方式进行组织。将相关类型放在一起


此外,您引用的指导原则来自.NET 1.1!线索是URL中的V7.1。正确的参考是,这是的一部分。

这里似乎有人问过这一点:嗨,约翰:谢谢更新的链接,它确实扩展了主题,至少有一点。似乎所有内容都应该集中在一起……而且有时,这会导致一个命名空间中有很多类。甚至考虑一个简单的例子,一个DLL:*业务实体,*接口,它们BIZIGITION实现…* * Enums是用于属性*当设置属性*扩展到BE时提出的异常…我甚至没有谈论不同的功能/组。一个很容易在一个命名空间中引出80个类。注释?不,所有的东西都不应该集中在一起。它应该由代码的功能区域组织——而不是按它的类型来组织。嗨,约翰:再次感谢。我很难理解你认为功能边界。如果有一个程序集是用于处理消息及其后续提供程序工厂,您将如何分解它?它都处理公共实体(消息、附件、地址、标题),引发公共消息异常,使用公共枚举(消息优先级、重要性等),以及一个MessagingManager+多个提供程序(LLBLGenBasedProvider、InMemProvider等)这都是功能的一个方面:消息…聚集在一起,或者分为子NS?如果是这样,什么/在哪里?我想我应该把提供者放在一个单独的“提供者”中命名空间,以及仅由提供程序使用的任何类型。这类似于.NET Framework如何将设计器与它们所设计的类放在一个单独的命名空间中。但所有其他设计器都位于同一个“基本”管理器命名空间中?因此,您使用的边界是“核心主题=消息=所有相同的NS,包括be、事件委托,除此之外”与核心主题相关的选项、枚举、扩展。加上可能由第三方实现核心主题的基类的子类…是否正确?