2010-09-23 82 views
7

我越來越意識到,我的任何單個文件中的代碼通常可以很容易地跨越數百行,儘管我知道實現可能是合理的,但它仍然感覺混亂和無組織。如何組織大型代碼文件?

我知道有些情況下需要很多代碼,但是最好的方法是什麼來組織它?

我想過從方法從public S和internals分離變量,private秒,但我不想因爲我不禁想,一類的組件在一個文件中的歸屬。

當我正在處理WPF窗口的代碼隱藏時,整個事情變得複雜起來,WPF窗口似乎總是以指數速度快速增長到一個巨大的混亂中。

另外:C#有一個名爲partial的關鍵字,它允許您在不影響功能的情況下在任意數量的文件上拆分類。不過,我注意到微軟似乎只使用partial來隱藏你生成的代碼(Winforms/WPF)。這導致我質疑是否僅僅因爲它有很多行來拆分類是partial的合法使用 - 是嗎?

謝謝

+3

如果您可以將一個類拆分爲多個邏輯上分離的'partial'文件,則應該將該類拆分爲多個類。你可能在一個地方負有太多的責任。 – Oded 2010-09-23 13:49:09

+2

只對部分生成的類使用partial。 – 2010-09-23 13:54:08

回答

13

將您的代碼分解爲職責。對於每個責任,定義一個單一的類型。也就是,按照Single Responsibility Principal。這樣做會導致更小的代碼單元,每個代碼都執行特定的功能。這不僅會導致更小的文件,而且會導致更好的設計和可維護性。

+0

這如何適用於WPF代碼隱藏課程? – Gabe 2010-09-23 15:02:25

+0

@Gabe:視圖的大多數(通常是全部)功能都駐留在一個或多個視圖模型中。在SRP之後意味着每個虛擬機都有一個單獨的責任,而不是將與視圖相關的所有內容合併到一個虛擬機中。也就是說,如果代碼隱藏在視圖相關的(而不是業務邏輯)中,並且不被其他視圖(不是共享的組件或行爲)共享,那麼在代碼隱藏中有時可以使用代碼。在這種情況下,SRP仍然得到支持,因爲責任是「表達觀點」,可以這麼說。 – 2010-09-23 15:55:04

2

我傾向於將屬性,構造函數,方法和輔助方法(私有方法)與區域一起分組。如果我有很多方法,我會根據他們的工作創建更多區域(特別適合重載)。說到重載,請嘗試使用可選參數來最小化代碼。

據我瞭解,部分意味着該類存在於兩個單獨的文件中。 Webforms和控件是部分的,因爲文件的另一個「部分」是與它一起使用的as [p | c] x文件。

+3

地區:只是說不;; – 2010-09-23 13:49:25

+0

@Kent - 他們不是那麼糟糕。他們只把我的房子燒了一次。 – Oded 2010-09-23 13:50:32

+3

在類文件中使用區域通常是壞OOD的標誌......並且永遠不會隱藏複雜性!讓它更簡單;-) – 2010-09-23 13:52:04

9

如果你的文件很大,因爲它們包含一個很大的類/結構,那麼這通常(但並非總是)暗示你的類正在處理多個問題,並且可以重構爲一些更小,更專業的班級。

1

我堅持認爲,如果你不能在一個屏幕上看到整個方法(即你必須滾動),你應該把方法分解成更多的方法 - 無論是在同一個類中,還是代碼將被使用不止一次成爲助手類。

5

如果我理解你,你的主要問題是你的表單最終會變得太大,這導致了那些包含太多代碼的表單的類,如果你的表單不是很簡單,這是非常正常的。嘗試儘量減少這種情況的方法是使用User Controls,因爲如果將控件移動到其他類中,則還會將代碼移到其他類中。

它有時會使控件之間的通信變得更加困難,但這通常不僅僅是因爲每個類中的代碼將更容易理解。

0

我們使用stylecop。它有點幫助,因爲它會在您的代碼上強制執行一個結構,併爲您在哪裏出現什麼命令。因此,您可以更直觀地找到更大的文件。