Miles' Blog

天涯何處無幹話,何必要講實務話

Single Responsibility Principle

單一職責原則簡稱 SRP。

Definition

原文定義:

There should never be more than one reason for a class to change.

比較簡單的說法大概就是:你只會因為一個原因而去改 Class。

Advantage

遵守 SRP 的好處:

  • 單一類別的複雜度降低,因為要實現的職責都很清晰明確的定義。
  • 可讀性提升。
  • 可維護性提升。
  • 變更引起的風險降低。如果SRP做的好,那修改只會對同一個介面/類別有影響,而與其他介面/類別無關,這對擴展性和維護性都有很大的幫助。

Problem

這是個充滿爭議的原則。爭議的點是,「那個變化原因」會是什麼?或者說,職責該如何劃分?

因為變化原因和職責都是無法量化的,而且會因為專案需求或環境而改變,所以事實上,SRP 很難在專案上實現。相反的,如果硬要達成SRP的條件,最直接的方法就是一個方法一個介面/類別,結果變成介面/類別數的劇增,反而帶來更多麻煩。

Conclusion

關於 SRP 的建議是:

  • 介面需要要做到單一職責原則
  • 類別則盡量做到一個原因引起變化
  • 方法要做到單一目的為原則
0%