SOLID原則-每個原則一句話理解大法
? ? ? ?上次更新完視頻后,一直處于封閉項目開發(fā)中,視頻鴿的時間有點長,給老鐵們說聲抱歉??。
? ? ? ?項目審查代碼過程中,剛好發(fā)現(xiàn)在帶新人的時候,他們對面向?qū)ο缶幊痰腟OLID原則理解普遍模糊,所以打算試試寫個專欄,看能不能不用看代碼的情況下嘗試?yán)斫馑ㄇ疤崾悄阌玫氖敲嫦驅(qū)ο缶幊陶Z言且入門了??)。
S - 單一職責(zé)原則:一個類只負(fù)責(zé)干一件事!例如正確的做法是一個對象的屬性(Domain Class)和服務(wù)方法(Service Method)放在不同的類中。
O - 開放關(guān)閉原則:一個業(yè)務(wù)對象需要提供可擴展性,而不是把不同業(yè)務(wù)邏輯全部放在一個類中,在需求變更的時候去修改它。正確的做法例如支付功能,可以擴展出支付寶支付、微信支付等等。
L - 里氏替換原則:接口或者基類的縱向繼承;例如下面的結(jié)構(gòu)不會因為標(biāo)準(zhǔn)不同,總是要去修改IA接口定義。
? ? ? ? ? ? ? ? ? ? IA [車對象接口]- > IB:IA[燃油車]?-> Impl:IB[燃油車實現(xiàn)]
? ? ? ? ? ? ? ? ? ??IA [車對象接口]-> Impl:IA[就是個車的共享功能實現(xiàn)]
? ? ? ? ? ? ? ? ? ??IA [車對象接口]- > IC:IA[新能源車]?-> Impl:IC[新能源車實現(xiàn)]
I - 接口隔離原則:接口或者基類的橫向集(繼)成(承),例如下面的結(jié)構(gòu)會不斷增強對象的能力。
? ? ? ? ? ? ? ? ? ??IA [車對象接口]??IB[行李架接口]? IC[牽引接口]?-> Impl:IA,IB,IC[越野車實現(xiàn)]
(OLI三個原則的區(qū)別是:開放關(guān)閉代表方式不同,里氏代表標(biāo)準(zhǔn)不同,接口隔離代表能力不同)
D - 依賴注入原則:就是服務(wù)(Service)類實現(xiàn)不依賴具體的功能實現(xiàn)類(Impl Class),而是依賴于實現(xiàn)類的抽象(基類/接口),例如“開放關(guān)閉原則”中實現(xiàn)了不同的支付方式,而具體的支付服務(wù)類只依賴于他們的支付基類,而不必關(guān)心到底是用什么方式完成支付的。
? ? ? ?好的系統(tǒng)開發(fā),就是盡可能解偶,便于維護,避免出現(xiàn)牽一發(fā)而動全身、修改Bug的時候出現(xiàn)壓下葫蘆浮起瓢的情況。