命名空间命名约定

Posted

技术标签:

【中文标题】命名空间命名约定【英文标题】:namespace naming conventions 【发布时间】:2010-10-29 11:12:47 【问题描述】:

对于那些编写可重用组件的人,如果您要扩展 .NET 框架的功能,您认为最佳实践是什么?

例如,我目前正在创建一个 Pop3 库,因为 .NET 中不存在该库。我是创建自定义命名空间还是使用System.Net.Mail

【问题讨论】:

【参考方案1】:

来自Namespace Naming Guidelines:

命名空间的一般规则 是使用公司名称后跟 技术名称和可选的 特点和设计如下。复制 代码

CompanyName.TechnologyName[.Feature][.Design]

通常,开始将内容包含到框架或库的默认命名空间中是一种非常糟糕的做法。这可能会导致混淆,即新命名空间是现有库的一部分,而现有库是分发给所有人的框架的一部分,还是属于其他人添加的自定义框架的一部分。

此外,命名约定试图通过具有唯一标识符(例如 CompanyName)来避免命名空间冲突。它还减少了新库的来源方面的任何混淆和问题。

这不仅是微软的事情,Java 也是如此。 Java 中称为“包”的命名空间具有 following convention:

唯一包名的前缀是 始终以全小写 ASCII 书写 字母,应该是其中之一 ***域名,目前为com, edu、gov、mil、net、org 或其中之一 英文两字母代码识别 ISO 标准中指定的国家 3166, 1981.

包的后续组件 名称因人而异 组织自己的内部命名 公约。这样的约定可能 指定某个目录名称 组成部分是部门,部门, 项目、机器或登录名。

所以,如果我有一款超级棒的软件,它可能在 net.coobird.superawesomesoftware 包中。

并且使用包含默认 java.javax.com.sun. 包的包名称是一个很大的禁忌。

【讨论】:

@Sir Psycho:Coobird 是对的,但您还需要保持开放的心态,您不希望命名空间最终太深。输入 3 '.' 后我开始担心。在命名空间名称中。 @Sir Psycho:命名空间指南还说,除了公司名称之外,一个知名品牌是另一种选择——这些是避免命名空间冲突的指南。因此,也许某些与其他人不同的标题(例如您的用户名?)可能是 CompanyName 的良好替代品:) @LILkilaaBEE:当您使用这些命名空间时,别名很好。不会使命名空间本身简洁。 将此答案用作我的指导,然后遇到未涵盖的问题,不要将类命名为与其命名空间相同的名称。它会导致参考问题,但不要相信我的话,请在此处阅读完整的详细信息:blogs.msdn.com/b/ericlippert/archive/2010/03/09/… 是否有包含命名空间的 [.Design] 部分的示例?【参考方案2】:

还可以查看以下 MSDN 文章,了解有关命名空间命名的指南

Names of Namespaces

为命名空间选择的名称应表明所实现的功能 可通过命名空间中的类型获得。例如, System.Net.Sockets 命名空间包含使开发人员能够 使用套接字通过网络进行通信。

命名空间名称的一般格式如下:

<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]

例如,Microsoft.WindowsMobile.DirectX

【讨论】:

什么是使用所有部分的完整示例? Microsoft.WindowsMo​​bile.DirectX.Lines?

以上是关于命名空间命名约定的主要内容,如果未能解决你的问题,请参考以下文章

[CompanyName] 以小写“i”开头时的命名空间命名约定

延迟加载基于控制器命名空间约定的外部 JS/CSS 文件?

PHP命名空间

C# 编码约定

Google C++项目命名约定

C++ 命名约定 [关闭]