完全合格的班级名称有什么意义?

时间:2009-10-29 17:21:01

标签: c# naming-conventions

我在C#中有第三方SDK,其类名如下:

com.companyname.productclass.enterprise.productname.sdkname.namespace
com.companyname.productclass.enterprise.productname.sdkname.namespace.objects
com.companyname.productclass.enterprise.productname.sdkname.namespace.objects.fields
com.companyname.productclass.enterprise.productname.sdkname.namespace.objects.fields.data
com.companyname.productclass.enterprise.productname.sdkname.namespace.security

......等等。

有什么意义我错过了吗?或者只是编码风格的问题?


SDK在几个方面比看起来更加冗长,导致数千行.cs文件,所以我愿意接受写它的人有不同的编码风格。 m曾经(或每个字节付费:D)

5 个答案:

答案 0 :(得分:7)

重点是避免命名冲突。例如,如果我在

中创建了一个带有“objects”命名空间的类库
com.davidstratton.productclass.enerprise.productname.sdkname.objects

它可以与其他类并存。

看起来有点矫枉过正,但请记住在前.Net时代困扰发展的“dll hell”的日子。公司可以(并且确实)具有相同名称的产品类,因此安装一个应用程序可能会破坏另一个应用程序。 .Net的设计目标之一就是避免这种情况。

您要询问的命名惯例实际上是在类设计指南中指定的,如下所示:http://msdn.microsoft.com/en-us/library/ms229048.aspx

修改 - 添加

上面的说法不正确,说这是在“官方指南”中。我不确定在哪里看到“com.companyname.blah.foo.bar”命名建议,但它不在我能找到的当前定义或旧定义中。我一定想象在某处读它。

所以我正式同意所有人的意见 矫枉过正。

答案 1 :(得分:5)

过分冗长。如果这个SDK是Java代码库的一个端口或者主要是由Java开发人员编写的话,我不会感到惊讶。

命名空间约定绝对不符合一般最佳实践和Microsoft建议。

请参阅:Namespace Naming Guidelines

答案 2 :(得分:1)

查看顶部,但是你应该总是包含一个命名空间,这样就不会与其他命名空间冲突(例如,基于公司的域) - 这对于SDK来说尤为重要,因为我猜的意图是它将用于各种各样的环境中。

如果你不这样做,那么你最终可能最后会后悔,并提前做一个重构工作来解决它。使用文件顶部的语句确实不是一个很大的负担。

答案 3 :(得分:1)

你应该阅读关于聪明的程序员创建一个名为“int”的全局变量的帖子(也在stackoverflow上)。那会匆忙回答这个问题!

答案 4 :(得分:1)

这是为了防止类命名冲突,当您在项目中使用多个库时,这种冲突可能会频繁发生。

.NET框架本身的一个很好的例子:Image命名空间中有一个System.Web.UI.WebControls类,Image命名空间中有一个System.Drawing类。如果没有名称空间,这些类就会相互冲突。