2011-04-04 79 views
1

讓我對.NET感到惱火的事情之一是,名稱空間應該是Pascal,這可能會導致名稱空間/類名衝突。什麼是名稱空間vs classname衝突問題的優雅解決方案?

考慮以下幾點:

namespace MyCompany.MyProduct.SalesOrder { 
    public class SalesOrder { 
    } 
} 

這是完全合法的代碼,但是消費者SalesOrder爲一類現在必須使用的MyCompany.MyProduct.SalesOrder.SalesOrder否則編譯原因惱人'MyCompany.MyProduct.SalesOrder' is a 'namespace' but is used like a 'type'錯誤完全合格的名稱。

別人在做什麼來解決這個問題?有些地方我看到其他人違反規則並使用小包裝,這確實吸引了我,但我確實喜歡遵守標準並使用適當的外殼。在我迄今爲止的使用中,我已儘可能地訂閱了基於複數的名稱空間名稱的概念,但這有時看起來很難看。

我個人認爲.NET錯了,應該像使用Java的包一樣使用底層的名稱空間。

+2

不要將您的類命名爲您的名稱空間。這很少是必要的。 – Talljoe 2011-04-04 09:15:17

+0

Talljoe,我不爭論我的班級名稱與名稱空間名稱相同,問題是有時發生衝突。例如,如果我有一個具有名稱空間「MyProduct.Drawing」的繪圖產品,因爲我希望它對'System.Drawing'命名空間建模,但是後來我想在MyProduct.Drawing內部創建一個名爲Drawing的類。另一個問題是,我有一個使用'System.Drawing'的產品,我有一個名爲'Design'的類,它與'System.Drawing.Design'命名空間衝突。再次強調,我認爲命名空間應該全部小寫。 – 2011-04-04 09:26:55

+1

您可以使用命名空間別名[http://msdn.microsoft.com/en-us/library/sf0df423.aspx]通過使其明確表達您想要的內容來解決此問題: using Design = MyProduct.Drawing.Design; – Talljoe 2011-04-04 09:33:19

回答

2

它完全贊同你,這種行爲是絕對煩人的。我通常只是傾向於給名稱空間一個更通用的名稱。在你的情況下,我會選擇類似MyCompany.MyProduct.SalesOrderManagement或只是MyCompany.MyProduct.SalesOrders

+0

感謝弗洛裏安,我認爲複數形式是整潔的,我討厭使用這種長名稱的類/名稱空間,整個.NET類庫都充滿了不必要的長類名。感謝這篇文章。 – 2011-04-04 09:22:43

3

SalesOrder作爲命名空間的目的是什麼?命名空間應該是一個「空間」,因此它應該覆蓋多於一個類。遵循此規則,您不應該在類和名稱空間之間發生衝突。

+0

名稱空間應該分隔你的邏輯項目,'SalesOrder'是一個模塊,這個名字空間下的類可以是'ISalesOrderService','SalesOrder','SalesOrderLine','HibernateSalesOrderService'。注意'SalesOrder'類,我試圖爲發生衝突的名稱空間名稱建立一個通用規則。 – 2011-04-04 09:21:25