问题 选择命名空间名称时应该知道什么?


我的任务是选择一个名称,该名称实际上是我们架构的内部名称。我认真对待这个责任,因为我曾经处理过很多“糟糕”的命名空间,并且不想在其他命名空间中造成一个。

什么使我的“坏”命名空间?

在人为因素方面:

  • 一个基本上没有意义的首字母缩略词: DDLMOS等等
  • 与另一个供应商的公共命名空间发生冲突的命名空间,例如 Office 要么 Text 要么 IO
  • 对于非母语英语使用者来说难以拼写或发音的命名空间,因为它是外来词或专有名词: Vancouver

等等。

我觉得在描述性能力和助记符方面选择名称空间感觉很舒服。我想知道是什么 技术 命名空间名称的后果可以是。例如,命名空间可能会出现什么问题 _,这是一个合法的C#命名空间名称?那么一封信就像 e?是否存在使CodeDom或Reflector适合的命名空间?在C#中合法的一些命名空间是否会导致其他.Net语言出现问题?是否有可能出于某种原因选择不符合Mono标准的命名空间?您是否曾使用过命名空间,因为涉及编译器或Visual Studio或Windows(或Linux)文件系统的原因使您的生活变得困难?

感谢您的阅读,并提前感谢您的帮助!


9977
2019-06-25 00:02:52


起源

IMO,C#命名空间是完美的,所以我只是复制它们。代替 System 我使用公司名称或产品名称。这就是我改变的一切。 - BrunoLM
@BrunoLM:完美是一个非常强烈的词,但我同意。 MS的命名空间经过精心设计和组织。但您也可以看看Java将命名空间放在一起的方式。来自.NET背景我认为Java的组织仍然更好,恕我直言。 - Paul Sasik
我喜欢有人问这个问题。起初我想,这是一件小事;但实际上,作为软件开发人员,我们应该始终努力做出好的设计决策。这是一个很好的例子。我知道有很多库都有难以理解的命名空间名称。 - Dan Tao
我也赞成这个问题。也许我一个人在这,但我认为良好的命名是所有优秀设计的基础。 - Joren


答案:


对于非技术性内容,请阅读框架设计指南。他们有很多好的建议。简述:

  • 从公司名称开始。
  • 选择稳定(版本无关)的名称。 FrobCorp.FrobozzleV2.Utilities很糟糕。
  • 选择反映代码目的的名称,而不是产生它的组织的政治。 FrobCorp.AdvancedResearchDivision.CambridgeOffice很糟糕; AdvancedResearchDivision可能会在明天重命名,剑桥办公室可能会重新安置。
  • 使用PascalCase,除非违反您的品牌。 FrobCorp.jFrobozzle看起来很糟糕,但FrobCorp.Jfrobozzle看起来更糟糕。
  • 适当时使用复数
  • 等等。

我没有在这里复制的指南中有更多好的建议。去读它们。

但是,听起来你有非技术性的东西。指南中的一点建议是“不要将类型命名为与其命名空间相同”。这是一个很好的建议,不仅仅是因为这样做会让读者感到困惑;还有一个很好的技术原因。

由于技术原因,为什么命名类型与其命名空间相同是一个可怕的想法,请参阅我关于该主题的文章:

http://blogs.msdn.com/b/ericlippert/archive/tags/namespaces/


18



这是本垒打的答案。 - Chris McCall
关于命名空间类型名称不同的指南经常是由程序员在这里完成的,当我多次提到它时,我被他看不起,因为他的标题中有程序员这个词。他告诉我这些指导方针适用于普通人,高级人员可以在他们认为合适时打破他们。甚至添加MS并不真正使用它们自己。无论如何,在我知道代码质量因无知而遭受的各种情况下该怎么做?因为您知道一旦发生变化,以后更改它就会更危险。 - Joan Venge
@Joan:了解“规则”和“指南”之间的区别非常重要,并且知道何时是在追求更大目标时无视规则或指导的时候。然而,这并不能使权威成为一个合理的论据!微软偶尔会违反这些指导原则,其中许多违规行为都在注释的框架设计指南中作为“为什么你永远不应该这样做,因为我们的错误给我们带来了很多痛苦”的例子。 Brad Abrams给出了微软将命名空间中的组织细节作为警示故事的例子。 - Eric Lippert
@为什么要这样做:如果没有成本效益理由,不要改变工作代码。改变的风险可能不会超过改进代码的好处。 - Eric Lippert
谢谢Eric,感谢您的建议。 - Joan Venge


确保命名空间尽可能唯一地启动,以避免您所描述的那种冲突。例如:

 YourCompanyName.subnamespace.subsubnamespace
 YourLastName.YourFirstName.subnamespace.subsubnamespace

0





第一次不要太努力去做对。无论你认为你的命名规则和结构多么聪明或干净,你都会重命名和移动东西。就是这样。

对于初学者来说,最重要的是确保基本名称中碰撞的可能性很小。稍后,您将能够使用ReSharper等工具轻松地重构命名空间。


0





使用您公司内任何单位的名称


-2



为了什么 技术原因?与.Net发展系统有关的东西,而不是人类 - Chris McCall
没有,据我所知。这只是惯例。见证微软,水晶等 - Beth
请参阅Erik Lipper关于为什么这是一个坏主意的答案。 - Supreme Grand Ruler