OOD 原則 - SOLID
物件導向設計 5 大原則:
1. (SRP) 單一職責:
一個類別只負責一件事情
2. (OCP) 開放/封閉原則:
開放擴充, 關閉修改
3. (LSP) Liskov替換:
子類別應該可以替換掉父類別而不會影響程式架構
物件導向設計 5 大原則:
1. (SRP) 單一職責:
一個類別只負責一件事情
2. (OCP) 開放/封閉原則:
開放擴充, 關閉修改
3. (LSP) Liskov替換:
子類別應該可以替換掉父類別而不會影響程式架構
子類別可以擴充父類別的功能, 但不能改變父類別原有的功能。子類別不要覆蓋父類別的方法!
-->設計上應該少用繼承, 多用composite/aggregation 達到re-use目的 (i.e., 做一個wrapper 包住 base class)
--> CARD - 先思考 Composition/Aggregation 的 Reuse ,真的沒辦法才思考 Derivation
4. (ISP) 介面隔離:
使用多個專門介面, 比使用單一總介面要好! 把不同的函數從介面中分離出來
--> 不同的函數應該屬於不同的介面
5. (DIP) 依賴反轉
高階模組不應依賴低階模組,兩個都應該依賴在抽象概念上
-->設計上應該少用繼承, 多用composite/aggregation 達到re-use目的 (i.e., 做一個wrapper 包住 base class)
--> CARD - 先思考 Composition/Aggregation 的 Reuse ,真的沒辦法才思考 Derivation
4. (ISP) 介面隔離:
使用多個專門介面, 比使用單一總介面要好! 把不同的函數從介面中分離出來
--> 不同的函數應該屬於不同的介面
5. (DIP) 依賴反轉
高階模組不應依賴低階模組,兩個都應該依賴在抽象概念上
抽象不應該依賴於細節, 細節應該依賴於抽象!
--> 針對介面寫程式
--> Dependency Injection 是實作 DIP 的手法 (例如: 通過Constructor注入依賴)
--> 若一個Constructor注入太多的依賴,則此Class 可能違反了SRP
SRP 與 OCP 都只是一個方向, 不是教義! 寫程式要專注一個主要的核心任務, class要盡可能簡單, 但是不是教義!
--> 針對介面寫程式
--> Dependency Injection 是實作 DIP 的手法 (例如: 通過Constructor注入依賴)
--> 若一個Constructor注入太多的依賴,則此Class 可能違反了SRP
SRP 與 OCP 都只是一個方向, 不是教義! 寫程式要專注一個主要的核心任務, class要盡可能簡單, 但是不是教義!
沒有留言:
張貼留言