淺談 SOLID

前言

你該學的不是設計模式
而是物件導向開發原則
大澤木小鐵

初學者在學習設計模式的時候,常常一知半解,學了以後好像也不是能很順利並適當地使用在專案上,筆者也是如此。直到看過鐵哥講解 SOLID 後,才意識到在使用設計模式之前,應該先好好學習 SOLID 的精神。鐵哥曾說過如果能掌握 SOLID,有沒有一定要使用設計模式也就沒有那麼重要了。可以想見,SOLID 是多麽重要的一個概念。

SOLID

SOLID 是由 Robert C. Martin(Uncle Bob)在 Agile software development (2002) 一書中提到的五個設計原則。很推薦做為物件導向程式開發時的一些心法,是五個概念的縮寫,但是在學習 SOLID 時有的文章也會列入 LKP ,所以筆者也將之列了進來:

單一職責原則 (Single responsibility principle, SRP)
開放封閉原則 (Open-Close principle, OCP)
里氏替換原則 (Liskov substitution principle, LSP)
最小知識原則 (Least knowledge principle,LKP)
介面隔離原則 (Interface segregation principle, ISP)
依賴反轉原則 (Dependency inversion principle, DIP)

若是開發的時候能遵守這六個原則,程式的品質也會大大提升。

再次節錄一段鐵哥在簡報裡放的整理:

SRP: 降低單一類別被「改變」所影響的機會
OCP: 讓主要類別不會因為「新需求」而改變
LSP: 避免繼承時子類別所造成的「行為改變」
LKP: 避免暴露過多資訊造成用戶端因流程調整而改變
ISP: 降低用戶端因為不相關介面而被改變
DIP: 避免高階程式因為低階程式改變而被迫改變

面對改變

如果看完了這些原則,也許會發現其實 SOLID 就是在說面對改變的策略
需求總是一直在變的,但是我們要怎麼在每次變化的過程中,確保改變不會帶來災難,或是埋下壞味道的種子,試著用 SOLID 去思考我們的程式碼,就可以降低改變帶來的影響。

Reference

PHP 也有 Day #19 - PHP 返樸歸真系列之從實例學設計模式 by 大澤木小鐵 (Jace Ju)​
物件導向設計原則 SOLID
SOLID:五則皆變