2009-10-29 36 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。沒有名稱空間,這些類將會相互衝突。

相關問題