單一職責原則簡稱 SRP。
Definition
原文定義:
There should never be more than one reason for a class to change.
比較簡單的說法大概就是:你只會因為一個原因而去改 Class。
Advantage
遵守 SRP 的好處:
- 單一類別的複雜度降低,因為要實現的職責都很清晰明確的定義。
- 可讀性提升。
- 可維護性提升。
- 變更引起的風險降低。如果SRP做的好,那修改只會對同一個介面/類別有影響,而與其他介面/類別無關,這對擴展性和維護性都有很大的幫助。
Problem
這是個充滿爭議的原則。爭議的點是,「那個變化原因」會是什麼?或者說,職責該如何劃分?
因為變化原因和職責都是無法量化的,而且會因為專案需求或環境而改變,所以事實上,SRP 很難在專案上實現。相反的,如果硬要達成SRP的條件,最直接的方法就是一個方法一個介面/類別,結果變成介面/類別數的劇增,反而帶來更多麻煩。
Conclusion
關於 SRP 的建議是:
- 介面需要要做到單一職責原則
- 類別則盡量做到一個原因引起變化
- 方法要做到單一目的為原則