物件導向設計原則(SOLID)#1 - Single Responsibility Principle
物件導向設計本身就具有封裝、繼承、多型、抽象這些特性。
那麼是否掌握這些特性,就可以寫出具備閱讀性、維護性、擴充性的程式碼呢?
非也…
在物件導向開發軟體的過程中,遵守Robert C. Martin提出的物件導向設計的五個原則(SOLID)。這樣會更容易開發出易維護與可擴展的系統。
| 縮寫 | 英文全名 | 中譯 |
|---|---|---|
| SRP | Single Responsibility Principle | 單一職責原則 |
| OCP | Open Closed Principle | 開放封閉原則 |
| LSP | Liskov Substitution Principle | 里氏替換原則 |
| ISP | Interface Segregation Principles | 介面隔離原則 |
| DIP | Dependency Inversion Principle | 依賴反轉原則 |
Single Responsibility
對於不熟的開發者,很常犯的錯誤就是把很多功能寫在同一個 class,雖然讓這個 class 擁有許多功能,但也大大增加了維護的困難。整體來說Z>B(利大於弊)。
那麼要做的是很簡單,讓 class 一次只做一件事,並移除與這件事情無關的程式碼和變數。
Do one thing and do it well.
Example
1 | public class StockReporter { |
這個範例很明顯違反了 Single Responsibility 原則
要改變資料取得方式,必須修改這個 Class
Solution
改變資料取得方式
1 | /** |
使用 Repository 來取得資料
1 | class Repository { |
因此,StockReporter 修改如下
1 | public class StockReporter { |
讓取得資料的相依關係透過 Repository 來處理
如此一來,當我們要更改取得資料這段邏輯的時候,便不需要更改 StockReporter 了。
最後 StockReporter 使用方式如下:
1 | public void use() { |