單一職責原則 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);
}
```