SOLID 是物件導向設計需遵守的基本原則
SRP - Single Responsibility Principle SRP
讓類別只有一種職責,一個類別只能有一個變更的理由
秘訣
- 使用專業領域分工切分職責
- 不要貪圖方便,將所有職責放在同一個類別
- 類別也不要切太細,會造成效能影響
OCP - Open-Close Principle
物件和 Entity 的擴展是開放的,但修改是封閉的
秘訣
- 設計抽象介面與外部互動
- 把變化委託給其他類別處理
- 只要異動 metadata or config
- 小心過度繼承
LSP - Liskov Substitution Principle
所有參照基礎類別(父類別)的地方,必須可以透明地使用衍生類別(子類別)的物件替代,而不需要任何改變
有繼承關係才需要考慮 LSP
秘訣
- 方法回傳值、丟出異常要一致
LKP - Least Knowledge Principle (a.k.a LOD - Law Of Demeter)
一個物件應該對其他物件有最少的瞭解
一個物件不要有太多public method
秘訣
- 已經成形的操作流程就封裝起來
- 不必要公開的方法就設為 private 或 protected
- 外面知道的越少,耦合度就越低
ISP - Interface Segregation Principle
用戶端不應該依賴它使用不到的介面
秘訣
- 把interface 當成可以做什麼
- 減少讓每個interface 可以做的事情
- 如果發現有空的實作時,就表示interface 可以再細化
DIP - Dependency Inversion Principle
高層模組不應該相依於低層模組,兩者都應該相依於抽象
抽象不應該相依於具體,具體應該相依於抽象
秘訣
- 互動的部份交給抽象類別或介面
- 會改變的實作,就放到子類別裡面