在做物件導向(OOP)的開發時,常常會發現有些人總是把一堆的功能塞在同一個物件中...
經過長年累月的時間中,某些人(Robert C. Martin 等人)歸納出一些比較好的開發原則,
讓之後的開發中透過檢視是否遵守這個公約,來減少一些代碼異味(Code Smell)。
SOLID 代表著五個原則的五個字首,分別代表:
這是五個原則中最簡單、最實用,也是最容易被人誤會的一個原則。
很多人把他誤會成一個類別(Class)只做一件事情,
甚至有人會說每個method/function都只完成一個任務(雖然這也是個不錯的開發習慣...)。
A class should have only one reason to change.
There should never be more than one reason for a class to change.
這段的翻譯過於文言文,所以用一個雖然不那麼精準,
但比較白話文的方式翻譯:
一個類別(Class)只能被另一個且唯一的類別(Class)呼叫。
單一職責原則(SRP)是用來避免與多個不同類別的耦合。
當我們在做大型開發時,常常會遇到一個問題,
底層的工具類別,常常會被一大堆的類別引用。
在這時候如果某個需求需要做更動的時候,
就會發現要馬改不動,要馬修改後就可能發生多個地方不可預期的錯誤。
雖然遵守單一職責原則(SRP)在大多數時候能增加系統的測試性及可維護性,
但是在設計時也是會有一些例外...
(例如之後會提到的 Singleton Pattern )