介紹 何謂原則(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.抽象不應該相依於細節,而細節則應該相依於抽象 參考資料 物件導向設計原則:SOLIDUdemy - 保哥SOLID 課程 本篇已同步發表至個人部落格https://moushih.com/2022ithome22/ 鐵人賽文章 https://ithelp.ithome.com.tw/articles/10292666