我在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)
答案 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建议。
答案 2 :(得分:1)
查看顶部,但是你应该总是包含一个命名空间,这样就不会与其他命名空间冲突(例如,基于公司的域) - 这对于SDK来说尤为重要,因为我猜的意图是它将用于各种各样的环境中。
如果你不这样做,那么你最终可能最后会后悔,并提前做一个重构工作来解决它。使用文件顶部的语句确实不是一个很大的负担。
答案 3 :(得分:1)
你应该阅读关于聪明的程序员创建一个名为“int”的全局变量的帖子(也在stackoverflow上)。那会匆忙回答这个问题!
答案 4 :(得分:1)
这是为了防止类命名冲突,当您在项目中使用多个库时,这种冲突可能会频繁发生。
.NET框架本身的一个很好的例子:Image
命名空间中有一个System.Web.UI.WebControls
类,Image
命名空间中有一个System.Drawing
类。如果没有名称空间,这些类就会相互冲突。