我的任务是选择一个名称,该名称实际上是我们架构的内部名称。我认真对待这个责任,因为我曾经处理过很多“糟糕”的命名空间,并且不想在其他命名空间中造成一个。
什么使我的“坏”命名空间?
在人为因素方面:
- 一个基本上没有意义的首字母缩略词:
DDL
, MOS
等等
- 与另一个供应商的公共命名空间发生冲突的命名空间,例如
Office
要么 Text
要么 IO
- 对于非母语英语使用者来说难以拼写或发音的命名空间,因为它是外来词或专有名词:
Vancouver
等等。
我觉得在描述性能力和助记符方面选择名称空间感觉很舒服。我想知道是什么 技术 命名空间名称的后果可以是。例如,命名空间可能会出现什么问题 _
,这是一个合法的C#命名空间名称?那么一封信就像 e
?是否存在使CodeDom或Reflector适合的命名空间?在C#中合法的一些命名空间是否会导致其他.Net语言出现问题?是否有可能出于某种原因选择不符合Mono标准的命名空间?您是否曾使用过命名空间,因为涉及编译器或Visual Studio或Windows(或Linux)文件系统的原因使您的生活变得困难?
感谢您的阅读,并提前感谢您的帮助!
对于非技术性内容,请阅读框架设计指南。他们有很多好的建议。简述:
- 从公司名称开始。
- 选择稳定(版本无关)的名称。 FrobCorp.FrobozzleV2.Utilities很糟糕。
- 选择反映代码目的的名称,而不是产生它的组织的政治。 FrobCorp.AdvancedResearchDivision.CambridgeOffice很糟糕; AdvancedResearchDivision可能会在明天重命名,剑桥办公室可能会重新安置。
- 使用PascalCase,除非违反您的品牌。 FrobCorp.jFrobozzle看起来很糟糕,但FrobCorp.Jfrobozzle看起来更糟糕。
- 适当时使用复数
- 等等。
我没有在这里复制的指南中有更多好的建议。去读它们。
但是,听起来你有非技术性的东西。指南中的一点建议是“不要将类型命名为与其命名空间相同”。这是一个很好的建议,不仅仅是因为这样做会让读者感到困惑;还有一个很好的技术原因。
由于技术原因,为什么命名类型与其命名空间相同是一个可怕的想法,请参阅我关于该主题的文章:
http://blogs.msdn.com/b/ericlippert/archive/tags/namespaces/
确保命名空间尽可能唯一地启动,以避免您所描述的那种冲突。例如:
YourCompanyName.subnamespace.subsubnamespace
YourLastName.YourFirstName.subnamespace.subsubnamespace
第一次不要太努力去做对。无论你认为你的命名规则和结构多么聪明或干净,你都会重命名和移动东西。就是这样。
对于初学者来说,最重要的是确保基本名称中碰撞的可能性很小。稍后,您将能够使用ReSharper等工具轻松地重构命名空间。