解耦

?解耦

? ? ? ? ????對(duì)于大型重構(gòu), 最有效的手段就是 解耦, 解耦的目的使實(shí)現(xiàn)代碼高聚合、松耦合。

? ? ? ? 解耦為何如此重要?

? ???????那如何來(lái)控制代碼的復(fù)雜性呢?手段有很多,我個(gè)人認(rèn)為,最關(guān)鍵的就是解耦,保證代碼松耦合、高內(nèi)聚。如果說(shuō)重構(gòu)是保證代碼質(zhì)量不至于腐化到無(wú)可救藥地步的有效手段,那么利用解耦的方法對(duì)代碼重構(gòu),就是保證代碼不至于復(fù)雜到無(wú)法控制的有效手段。

? ???????“高內(nèi)聚、松耦合”是一個(gè)比較通用的設(shè)計(jì)思想,不僅可以指導(dǎo)細(xì)粒度的類和類之間關(guān)系的設(shè)計(jì),還能指導(dǎo)粗粒度的系統(tǒng)、架構(gòu)、模塊的設(shè)計(jì)。相對(duì)于編碼規(guī)范,它能夠在更高層次上提高代碼的可讀性和可維護(hù)性。

? ??????不管是閱讀代碼還是修改代碼,“高內(nèi)聚、松耦合”的特性可以讓我們聚焦在某一模塊或類中,不需要了解太多其他模塊或類的代碼,讓我們的焦點(diǎn)不至于過(guò)于發(fā)散,降低了閱讀和修改代碼的難度。而且,因?yàn)橐蕾囮P(guān)系簡(jiǎn)單,耦合小,修改代碼不至于牽一發(fā)而動(dòng)全身,代碼改動(dòng)比較集中,引入 bug 的風(fēng)險(xiǎn)也就減少了很多。同時(shí),“高內(nèi)聚、松耦合”的代碼可測(cè)試性也更加好,容易 mock 或者很少需要 mock 外部依賴的模塊或者類。

? ??????除此之外,代碼“高內(nèi)聚、松耦合”,也就意味著,代碼結(jié)構(gòu)清晰、分層和模塊化合理、依賴關(guān)系簡(jiǎn)單、模塊或類之間的耦合小,那代碼整體的質(zhì)量就不會(huì)差。即便某個(gè)具體的類或者模塊設(shè)計(jì)得不怎么合理,代碼質(zhì)量不怎么高,影響的范圍是非常有限的。我們可以聚焦于這個(gè)模塊或者類,做相應(yīng)的小型重構(gòu)。而相對(duì)于代碼結(jié)構(gòu)的調(diào)整,這種改動(dòng)范圍比較集中的小型重構(gòu)的難度就容易多了。

? ? ? ? 代碼是否需要 解耦 ?

? ??????????間接的衡量標(biāo)準(zhǔn)有很多,,比如,看修改代碼會(huì)不會(huì)牽一發(fā)而動(dòng)全身。除此之外,還有一個(gè)直接的衡量標(biāo)準(zhǔn),也是我在閱讀源碼的時(shí)候經(jīng)常會(huì)用到的,那就是把模塊與模塊之間、類與類之間的依賴關(guān)系畫(huà)出來(lái),根據(jù)依賴關(guān)系圖的復(fù)雜性來(lái)判斷是否需要解耦重構(gòu)。

? ??????????如果依賴關(guān)系復(fù)雜、混亂,那從代碼結(jié)構(gòu)上來(lái)講,可讀性和可維護(hù)性肯定不是太好,那我們就需要考慮是否可以通過(guò)解耦的方法,讓依賴關(guān)系變得清晰、簡(jiǎn)單。當(dāng)然,這種判斷還是有比較強(qiáng)的主觀色彩,但是可以作為一種參考和梳理依賴的手段,配合間接的衡量標(biāo)準(zhǔn)一塊來(lái)使用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容