JT's Blog

Do the right things and do the things right.

Object Oriented Design Principles - SOLID

| Comments

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

高層模組不應該相依於低層模組,兩者都應該相依於抽象

抽象不應該相依於具體,具體應該相依於抽象

秘訣

  • 互動的部份交給抽象類別或介面
  • 會改變的實作,就放到子類別裡面

Reference

Comments