对于那些编写可重用组件的人来说,如果扩展.NET框架的功能,您认为什么是最佳实践?
例如,我正在创建一个Pop3库,因为.NET中不存在。我是创建自定义命名空间还是使用System.Net.Mail
?
答案 0 :(得分:62)
来自Namespace Naming Guidelines:
命名命名空间的一般规则 是使用公司名称后跟 技术名称和可选的 功能和设计如下。复制 代码
CompanyName.TechnologyName[.Feature][.Design]
通常,将内容包含在框架或库的默认命名空间中是一种非常糟糕的做法。这可能会导致混淆,即新命名空间是否是现有库的一部分,该库是分发给每个人的框架的一部分,或者是由其他人添加的自定义框架的一部分。
此外,命名约定通过使用CompanyName
等唯一标识符来尝试避免命名空间冲突。它还减少了新库的来源方面的任何混淆和问题。
这不仅是微软的事情,也是Java中的事情。 Java中的名称空间称为“包”,其中包含following convention:
唯一包名称的前缀是 总是用全小写ASCII编写 信件应该是其中之一 顶级域名,目前为com, edu,gov,mil,net,org,或者其中之一 英文双字母代码识别 ISO标准中规定的国家/地区 3166年,1981年。
包的后续组件 名称因a而异 组织自己的内部命名 约定。这些惯例可能会 指定某个目录名称 组成部门,部门, 项目,机器或登录名。
所以,如果我有一个非常棒的软件,它可能在net.coobird.superawesomesoftware
包中。
使用包含默认java.
,javax.
,com.sun.
软件包的软件包名称是一个很大的禁忌。
答案 1 :(得分:16)
另请参阅以下MSDN文章,了解有关命名命名空间的指南
为命名空间选择的名称应指明所做的功能 可通过命名空间中的类型获得。例如, System.Net.Sockets命名空间包含允许开发人员使用的类型 使用套接字通过网络进行通信。
命名空间名称的一般格式如下:
<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]
例如,
Microsoft.WindowsMobile.DirectX
。