我聽過很多關於什麼時候應該分解類的規則(比如你的類變得難以管理),但我不知道這個問題的具體答案。什麼是分解的好處,什麼表示一個類應該分解?
我不是在尋找「最佳實踐」或「代碼氣味」。例如,如果我看到重複的代碼,我知道有一個特定的解決方案:通過創建基類或其他創建可以使用的單個方法來消除重複的代碼。這是我正在尋找的具體答案的一個例子。
但它不是那麼清楚,我當一個類應該分解成兩個或多個類別。我可以告訴你,我的經驗法則是,當我看到不止一個廣泛的責任時,我就重構其中的一項責任。但這更像是一種「最佳做法」,我想更準確地說明這一點。
我發現的最接近的是單一責任原則。 「單一責任原則規定,每個對象都應該承擔一項責任。」但是什麼是責任?如何確切地定義?
鮑勃馬丁說這是「改變的理由」。舉一個具體的例子,假設你有一個應用程序,它接受一個輸入,處理它並創建一個輸出。這將導致三個方面的變化 - 輸入(可能來自字符串或XML)。處理器可以改變它的規則。輸出可能會改變:它可能是字符串或XML或數據庫。所以它會給你三個頂級的課程。
再次,不尋找辯論或最佳做法,但如果有一個堅實的分解原則。或者,也許,一個堅實的構圖原則將是一個更好的陳述方式。
的動機在我身後分解成分 - 我發現高度由應用程序是更加靈活和易於使用。
另一個原因分解,使我作爲一個開發者,通過看類,可以更好地瞭解整個應用程序。爲了對班級有一個清晰的理解,我認爲班級有一個明確的目的。雖然這與類命名有關,但我認爲如果一個類有這樣一個目的,那將是最容易理解的,因此是分解的一個很好的基礎。
向上面應用此例子中,這將是明顯的在哪裏看,如果我需要做的輸入,處理和輸出維護,我開始在明顯的類作爲每個人都有一個明顯的目的。 (但我只是想大聲這裏,試圖澄清自己。)
所以,問題是:什麼是分解的好處,什麼指示類應該被分解?
我真的不明白你的問題。你已經很好地回答了你自己的問題。 – BartoszKP
好吧,也許我只是想通了一下。:) –
我不確定我是否正確,但在C#中,沒有任何東西阻止您創建部分類來分離代碼。 –