【发布时间】:2023-03-03 11:05:02
【问题描述】:
对于那些编写可重用组件的人,如果您要扩展 .NET 框架的功能,您认为最佳实践是什么?
例如,我目前正在创建一个 Pop3 库,因为 .NET 中不存在该库。我是创建自定义命名空间还是使用System.Net.Mail?
【问题讨论】:
标签: c# .net namespaces design-guidelines
对于那些编写可重用组件的人,如果您要扩展 .NET 框架的功能,您认为最佳实践是什么?
例如,我目前正在创建一个 Pop3 库,因为 .NET 中不存在该库。我是创建自定义命名空间还是使用System.Net.Mail?
【问题讨论】:
标签: c# .net namespaces design-guidelines
来自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. 包的包名称是一个很大的禁忌。
【讨论】:
还可以查看以下 MSDN 文章,了解有关命名空间命名的指南
为命名空间选择的名称应表明所实现的功能 可通过命名空间中的类型获得。例如, System.Net.Sockets 命名空间包含使开发人员能够 使用套接字通过网络进行通信。
命名空间名称的一般格式如下:
<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]例如,
Microsoft.WindowsMobile.DirectX。
【讨论】: