2009-10-29 34 views
3

我在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文件,所以我愿意接受写有不同的编码风格的人到我以前的(或者每个字节付费的)D:

+0

水晶报表是一个可怕的产品的另一个原因。 – 2009-10-29 18:06:48

回答

5

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

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

参见:Namespace Naming Guidelines

+1

是的,我相信这家公司的很多产品都是用Java编写的。感谢您的链接,这让我放心,我在我自己的代码中使用了一个明智的约定! – 2009-10-29 17:31:11

7

关键是避免命名冲突。例如,如果我创建了一个类库与“物”的命名空间中

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”命名建议,但它不在我目前可以找到的定义或更旧的定义中。我一定想过在某个地方读它。

所以我正式同意大家说的是 矫枉过正。

+0

我可以看到命名空间冲突可能是一个问题。但肯定'productname.objects'就足够了?或'productname.sdkname.objects'最多? 9级的命名空间似乎超越了我的偏执狂! – 2009-10-29 17:27:34

+0

这可能是矫枉过正。您的示例中的深度对我而言似乎极端,但它确实遵循“官方”指南。 – David 2009-10-29 17:29:42

+0

然后他们有什么“官方”指导方针? MS的那些并不那么深。这个例子是没有必要的。 – 2009-10-29 17:43:14

1

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

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

1

你应该阅读后(也计算器)是谁创建了一个名为,一个全局变量聪明的程序员“INT”。那会很快回答这个问题!

+0

你有链接到这个职位? – David 2009-10-29 17:38:43

+0

我刚才也在看,我看不到它。也许它已被删除? – 2009-10-29 17:40:14

+1

找到了。 http://stackoverflow.com/questions/1642421/vbscipt-call-builtin-functions-shadowed-by-global-variables – David 2009-10-29 18:06:14

1

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

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

相关问题