重构改善既有代码的设计是php,下篇 |《重构 改善既有代码的设计—笔记》| PHP 技术论坛...
循環(huán)語句
我們常用到循環(huán),現(xiàn)在有了新的函數(shù),例如 php 的 foreach(),java 的管道操作(如 filter 和 map),可以幫助我們更快地處理數(shù)據(jù)。
冗贅的元素
給代碼增加結(jié)構(gòu)(如類和函數(shù))可以支持變化、促進(jìn)復(fù)用。但可能最初在編寫類或函數(shù)時(shí)覺得以后可能會(huì)變得更大、更復(fù)雜,結(jié)果卻越變?cè)叫?#xff0c;最后剩一個(gè)函數(shù),那么這時(shí)便要考慮將其歸并到其他地方了。
夸夸其談通用性
如果你總是覺得“總有一天需要做這事”,然后企圖以各種各式各樣的鉤子和特殊情況來處理一些事情,那么壞代碼就出現(xiàn)了,這樣做往往造成系統(tǒng)更加難理解和維護(hù)。
應(yīng)該遵循這樣的原則:如果所有的裝置都會(huì)被用到,那就值得那么做,如果用不到,就不值得。
臨時(shí)字段
有時(shí)某個(gè)類的某個(gè)字段僅為某種特定情況而設(shè),這樣的代碼不容易理解,因?yàn)槟阃ǔUJ(rèn)為對(duì)象在所有時(shí)候都需要它的所有字段,在字段未被使用的情況下猜測(cè)當(dāng)初設(shè)置它的目的,會(huì)讓你很疑惑。
最好是將這個(gè)字段和與這個(gè)字段相關(guān)的代碼集中在一塊。
過長(zhǎng)的消息鏈
如果你看到用戶向一個(gè)對(duì)象請(qǐng)求另一個(gè)對(duì)象,然后再向后者請(qǐng)求另一個(gè)對(duì)象,接著繼續(xù)請(qǐng)求另一個(gè)對(duì)象……這就是消息鏈。這意味著代碼緊耦合,一旦對(duì)象間的關(guān)系發(fā)生變化,那么客戶端就得做出相應(yīng)的修改。
通常是將調(diào)用對(duì)象的代碼用函數(shù)封裝起來,這樣客戶端不需要知道對(duì)象間的關(guān)系,只需要知道調(diào)用這個(gè)函數(shù)就可以返回最終需要的對(duì)象。
中間人
前面消息鏈講到的封裝如果使用不恰當(dāng),可能會(huì)造成過度使用,這時(shí)應(yīng)該移除中間人(封裝的函數(shù)),直接與真正負(fù)責(zé)的對(duì)象打交道。
內(nèi)幕交易
模塊之間大量交換數(shù)據(jù),增加模塊間的耦合,應(yīng)當(dāng)盡量減少這種情況。
過大的類
如果單個(gè)類做太多事情,往往會(huì)出現(xiàn)很多字段與重復(fù)代碼。最好是將相關(guān)的變量提到新類,或者提煉相同的代碼到函數(shù)去。
異曲同工的類
當(dāng)存在不同的類卻在做同樣的事時(shí),可以通過搬移函數(shù)到其中一個(gè)類,逐漸消滅另一個(gè)類。
純數(shù)據(jù)類
純數(shù)據(jù)類是指除了擁有一些字段和訪問這些字段的函數(shù)之外,便沒有其他用處了。可以嘗試找出這些函數(shù)被調(diào)用的地點(diǎn),盡量將調(diào)用行為搬移到純數(shù)據(jù)類來。
被拒絕的遺贈(zèng)
子類應(yīng)該繼承超類的函數(shù)和數(shù)據(jù),如果存在子類不想繼承的,說明繼承體系設(shè)計(jì)錯(cuò)誤。這時(shí)可以新建一個(gè)兄弟類,將不需要的函數(shù)推給兄弟類,這樣超類就只持有子類共享的東西。
子類不想繼承超類的接口與不想實(shí)現(xiàn)超類的接口是兩回事,既然不想繼承,那就直接畫清界限吧。
注釋
如果你發(fā)現(xiàn)一段代碼有著長(zhǎng)長(zhǎng)的注釋時(shí),說明這段代碼難以理解,此時(shí)需要將代碼搬移到新函數(shù),并為它取個(gè)說明這段代碼用途的名字。
總結(jié)
以上是生活随笔為你收集整理的重构改善既有代码的设计是php,下篇 |《重构 改善既有代码的设计—笔记》| PHP 技术论坛...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 查询数据库 刷新,这个每次刷新都
- 下一篇: java transaction cn,