單一職責原則 Single Responsibility Principle === ## 定義:A class should have only one reason to change 一個模組應有且只有一個理由會使其改變 ## 目的: 提高程式碼的一致性,讓程式碼更易於管理和重複使用。 ## 解析 每個程式碼片段都只關注一件事情 ## 重要性 單一職責原則乍看之下好像很簡單,但實踐過程其實困難重重。現實狀況常常是:專案起初幾個版本的程式碼意圖都相當簡單明瞭,但是當需求隨著時間增長再加上開發時程短促,讓開發人員不斷在原本的程式碼上堆疊新的程式碼。最後 舊程式碼與新程式碼糾纏在一起,使得程式碼的意圖和邊界漸漸變得模糊且互相耦合。若在意圖模糊的程式碼上繼續擴充或修改,則會使程式碼的意圖逐漸流失並且擴大影響範圍,最後變成 技術債 折磨維護專案的人員。 ## 優點 1. 類別的複雜性降低 2. 可讀性提高 3. 可維護性提高 4. 降低因更改的風險:如果單一職責能做得好,更改一項類別或介面時,不會引起其他介面或類別的變更 ## 範例 ```java= public class leaveProcess{ public Chosedate calculateDate(){ //... int = calculateHours(Chosedate date); //... }; public Double calculateHours(Chosedate date); public void leave(Double d); } ``` ## reasons to change 1. 修改計算日期,修改calculateDate(); 2. 修改計算時數,修改calculateHours(); 3. 修改請假方法,修改leave(); 當需求來了,修改計算時數的方法,結果導致了計算日期的結果錯誤。 ## 修改 ```java= public class CalculateDate{ //... public Chosedate calculateDate(); } public class CalculateHours{ //... public Double calculateHours(Chosedate date); } public class Leave{ //... public void leave(Double d); } ```