2009-06-04 58 views
2

你如何在課堂內將班級成員分組?當你爲一個類添加一個新的方法時,你是否將它們添加到它應該按字母順序排列的位置?內部班級成員分組指導

你使用區域嗎?我使用它們與Visual Studio的接口實現的存根生成器創建的組一起,如:

#region IEnumerable 

... 

#endregion 

我使用區域的名稱,如「屬性」,等等,但一些成員被證明是一個小更棘手組/整理。

你如何處理這個問題?

+0

重複:http://stackoverflow.com/questions/194538/class-member-organization? – 2009-06-04 17:52:50

+0

還沒有見過那個。雖然這是專門針對.net的區域等。 – 2009-06-04 18:01:58

回答

2

我親自按照StyleCop中提出的排序規則進行操作。它對你的方法/屬性/事件/等的順序非常嚴格。

我不一定相信它有「最好」的規則,但我仍然遵循它,主要是因爲它是保證一致性的好工具。我希望我的代碼始終保持一致,而不是始終符合我夢寐以求的理想 - 特別是因爲我有多個程序員,並且外部工具有助於實施規則解決方案。

5

也許這是過於嚴格的,但我認爲如果你有這麼多的班級成員,你擔心如何將他們分組以保持可讀性,那麼你應該把你的班級分成更小的班級和更少的成員。

除此之外,我只是使用常識;相互調用的類似方法或方法被組合在一起,構造函數被組合在一起,屬性被組合在一起,公共事物在最前面,人們幾乎從不需要看的事物在底部。

+0

我偶爾會使用嵌套區域來組合一組特定的方法(如果它們實現了一個接口)。 – Brandon 2009-06-04 17:48:17

+0

謝謝,但我認爲打破類型不是一個好主意。我只包括與課程完全相關的東西。你仍然可以結束說20-30的方法取決於類,比如xna類型。 – 2009-06-04 17:56:04

1

使用區域,按功能劃分。這樣,隨着班級的增長,您可以看到各個區域開始增長,然後這些區域本身就成爲這個班級正在實施什麼樣的責任以及重構的指導方針(即「嘿,我的'過程項目'區域就像5個功能!也許我需要一個班來處理項目!「)。

1

一般:

  • 構造函數(如果有過載)
  • 靜態方法
  • 方法
  • 屬性
  • 活動
  • 可能分組的接口的實現(即IEnumerable<T>),但絕對用於顯式接口實現
  • 嵌套類型

如果ASP.NET:

  • 控件(字段的名字映射到控制)

如果我有了一些重載那麼我想補充的方法那些地區。或者,如果有幾個類似但不一定重載的方法(例如,List<T>中的Find,FindAll,FindIndex等,則它們將位於「Find」的一個區域中)。

如果我想在課堂上找到某些東西,而不是按名稱找到東西,那麼問題就是分組。實際上,區域提供有關僅對編輯有用的類成員的元數據。

這是我的組織的一般方法,我的地區也遵循。再說一遍。每個班級都不同(否則爲什麼要寫它?)所以YMWV:那裏沒有「可能」。

0

因爲Visual Studio編輯器在對象選擇下拉列表中對它們進行了排序,所以添加新的時候我不重新排序方法或屬性。我將來源中的方法,屬性和類變量組合在一起。在大班上我使用過地區,但對於大多數班級,我不覺得他們是需要的。

儘管皮特布朗並沒有解決地區問題,但他在site提供了一個有用的命名約定列表。