目錄
介紹
何謂原則(Principle)
- A principle is a concept or value that is a guide for behavior or evaluation
- 所謂【原則】(Principle)就是一種【概念】或【價值】,用來導引你產生適切的行為與價值評量方法
白話文解釋
- 依循SOLID原則,可以寫出比較好的程式碼
- 依循SOLID原則,能夠判斷程式碼的好壞
背起來
- 單一責任原則SRP(Single Responsibility Principle)
- 開放封閉原則OCP(Open Closed Principle)
- 里氏替換原則LSP(Liskov Substitution Principle)
- 介面隔離原則ISP(Interface Segregation Principle)
- 相依反轉原則DIP(Dependence Inversion Principle)
學習SOLID物件導向設計原則的好處
- 降低程式碼複雜程度
- 具有較佳程式碼可讀性
- 提升模組可重複利用性
- 讓模組具有高內聚,低耦合力
- 面臨變更需求時可減少破壞現有模組的風險
單一責任原則SRP
何謂責任(Responsibility)
- 責任= reason to change (改變的理由)
- 當一個類別擁有多個不同的責任,意味者一個類別責任多項不同的工作,當需求變更時,更動一個類別的理由也可能不只一個
開放封閉原則OCP
- Software entities(classes,modules,functions,etc.) should be open for extension but closed for modification
- 軟體實體(類別、模組、函式等)應能開放擴充但封閉修改
- 藉由增加新的程式碼來擴充系統的功能,而不是藉由修改原本已經存在的程式碼來擴充系統
里氏替換原則LSP
- Subtypes must be substitutable for their base types.
- subtypes(衍生類別) = 類別
- base types(基底類別) =介面、抽象類別、基底類別
- 子型別必須可替換為他的基底型別
- 如果你的程式有採用繼承或介面,然後建立出幾個不同的衍生型別(Subtype)。在你的系統中只要是基底型別出現的地方,都可以用子型別來取代,而不會破壞程式原有的行為。
介面隔離原則ISP
- A:Many client specific interfaces are better than one general purpose interface.
- B:Clients should not be forced to depend upon interface that they don’t use.
- A:多個用戶端專用的介面優於一個通用需求介面
- B:用戶端不應該強迫相依於沒用到的介面
- 針對不同需求的用戶端,僅開放其對應需求的介面就好
相依反轉原則DIP
- A.High-level modules should not depend on low-level modules.Both should depend on abstractions.
- B.Abstractions should not depend on details.Details should depend on abstractions.
- A.高階模組不應該依賴於低階模組,兩者都應相依於抽象
- 高階模組=>Caller(呼叫端)
- 低階模組=>Callee(被呼叫端)
- B.抽象不應該相依於細節,而細節則應該相依於抽象
參考資料
物件導向設計原則:SOLID
Udemy – 保哥SOLID 課程
我的鐵人賽文章
https://ithelp.ithome.com.tw/articles/10292666