玩轉C#之【SOLID】

by NickChi
SOLID

介紹

何謂原則(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

You may also like

Leave a Comment