2010-09-17 98 views
11

我的任務是選擇一個實際上是我們架構內部名稱的名稱。我認真對待這個責任,因爲我曾與很多「糟糕的」命名空間合作過,並且不想在其他人身上施加這種責任。選擇名稱空間名稱時應該知道什麼?

什麼使我「壞」的命名空間?

在人爲因素方面:

  • 的首字母縮寫,其基本上無意義:DDLMOS
  • 與從另一個供應商提供的一個共同的碰撞時,像OfficeTextIO
  • 命名空間
  • 由於它是外來詞或專有名詞,難以爲非母語英語人員拼寫或發音的命名空間:Vancouver

等等。

我覺得在描述能力和助記符方面選擇一個命名空間是很舒服的。我在想什麼技術名稱空間名稱的後果可以。例如,名稱空間_可能會產生哪些問題,這是一個合法的C#名稱空間名稱?單個字母怎麼樣,比如e?有CodeDom或Reflector的命名空間是否適合?在C#中使用一些合法的命名空間會導致其他.Net語言中的問題?是否有可能因某種原因選擇不符合Mono的名稱空間?您是否因使用編譯器或Visual Studio或Windows(或Linux)文件系統的原因而使用命名空間使您的生活變得困難?

感謝您的閱讀,並提前感謝您的幫助!

+1

IMO,C#命名空間是完美的,所以我只是複製它們。我使用公司名稱或產品名稱代替'System'。這就是我所做的一切。 – BrunoLM 2010-09-17 15:16:29

+0

@BrunoLM:完美是一個非常強大的詞,但我同意。 MS的命名空間是相當深思熟慮和組織。但是你也可以看看Java把命名空間放在一起的方式。來自.NET背景,我認爲Java的組織仍然更好,恕我直言。 – 2010-09-17 15:36:24

+0

我喜歡有人問這個問題。起初我想,這是一件小事;但實際上,作爲軟件開發人員,我們應該始終努力做出好的設計決策。這是一個很好的例子。而且我知道很多圖書館都有難以理解的命名空間名稱。 – 2010-09-17 15:55:29

回答

18

對於非技術性的東西,請閱讀框架設計指南。他們有很多好的建議。簡而言之:

  • 以公司名稱開頭。
  • 選擇穩定(版本無關)的名稱。 FrobCorp.FrobozzleV2.Utilities是不好的。
  • 選擇反映代碼目的的名稱,而不是生成它的組織的政治。 FrobCorp.AdvancedResearchDivision.CambridgeOffice不好; AdvancedResearchDivision可能會在明天重新命名,劍橋辦公室可能會重新部署。
  • 使用PascalCase,除非這違反了您的品牌。 FrobCorp.jFrobozzle看起來很糟糕,但是FrobCorp。Jfrobozzle看起來更糟。
  • 適當時使用複數
  • 等。

我在這裏沒有轉載的指南中有很多好的建議。去看看他們。

但是,這聽起來像你有非技術性的東西了。準則中的一點建議是「不要將命名空間的類型命名爲類型」。這是很好的建議,不僅僅是因爲這樣做會讓讀者感到困惑。還有一個很好的技術原因。

對於技術原因,命名類型相同,它的名稱空間是一個可怕的想法,看我的文章的題目:

http://blogs.msdn.com/b/ericlippert/archive/tags/namespaces/

+0

這是一個本壘打的答案。 – 2010-09-17 16:13:11

+0

關於與命名空間的類型名稱不同的指導原則經常由程序員在這裏完成,當我多次提到它時,我只是因爲他在他的頭銜中有程序員這個詞而被他看不起。他告訴我這些普通人的指導方針,先進的人可以在他們認爲合適時打破他們。而且即使MS並沒有真正使用它們自己。無論如何,在這種類型的情況下,我知道代碼質量因無知而受到影響?因爲您知道一旦進行了更改,稍後更改風險更大。 – 2010-09-17 17:09:21

+2

@Joan:瞭解「規則」與「準則」之間的區別很重要,要知道什麼時候是無視規則或準則以追求更大目標的正確時機。然而,這並不能使權威成爲一個合理的論點!微軟有時違反了這些指導原則,其中許多違規行爲在註解的框架設計指南中被記錄爲「爲什麼你永遠不應該這樣做,因爲我們的錯誤給我們帶來了很多痛苦」。布拉德艾布拉姆斯給出了微軟將組織細節放在命名空間中作爲警示故事的例子。 – 2010-09-17 18:01:40

0

確保命名空間儘可能地以獨特方式啓動,以避免您描述的那種碰撞。例如:

YourCompanyName.subnamespace.subsubnamespace 
YourLastName.YourFirstName.subnamespace.subsubnamespace 
-2

圍棋與您在公司內部正處於任何單位名稱

+0

爲什麼*技術原因*?據我所知,有些東西是屬於.Net開發系統的,並非人類 – 2010-09-17 15:25:52

+0

沒有。這只是公約。見證微軟,水晶等 – Beth 2010-09-17 16:03:05

+0

查看Erik Lipper的答案,爲什麼這是一個壞主意。 – 2016-11-10 00:28:05

0

不要太難得到正確的第一次。無論你多麼聰明或乾淨,你認爲你的命名習慣和結構可能是你將重命名和移動的東西。就是這樣。

對於初學者來說,確保您的基本名稱中碰撞的可能性很低是最重要的。稍後,您將可以使用ReSharper等工具輕鬆地重構命名空間。

相關問題