一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

PHP 雜談《重構(gòu)-改善既有代碼的設(shè)計(jì)》之二 對象之間搬移特性

思維導(dǎo)圖

索引:

Ø Move Method(搬移函數(shù))Ø Move Field (搬移值域)Ø Extract Class (提煉類)Ø Inline Class (將類內(nèi)聯(lián)化,就是把當(dāng)前的類合并到其他類中)Ø Hide Delegate (隱藏委托關(guān)系)Ø Remove Middle Man ( 移除中間人)Ø Introduce Foreign Method (引入外加函數(shù))Ø Introduce Local Extension (引入本地?cái)U(kuò)展)  介紹  承接上文php 雜談《重構(gòu)-改善既有代碼的設(shè)計(jì)》之 重新組織你的函數(shù) ,繼續(xù)說重構(gòu)方面的內(nèi)容。 
 專業(yè)術(shù)語 delegate:委托encapsulate:封裝introduce:引入wrapper:覆蓋  前言 ”決定把責(zé)任放在哪里“――運(yùn)用重構(gòu)改變原先的設(shè)計(jì)。 

解釋:

  1、Class承擔(dān)過多而臃腫不堪――Extract Class將一部分責(zé)任分離出去。

  2、Class沒有承擔(dān)足夠多的責(zé)任,不再有單獨(dú)存在的理由――Inline Class將它融入另一個(gè)Class。

  3、Class使用另一個(gè)Class――Hide Delegate隱藏關(guān)系。

  4、承接(3),如果Client通過Middle Man 調(diào)用很多的Delegate Class的函數(shù)(這里只是簡單調(diào)用,只做跳轉(zhuǎn),而Middle Man沒有做太多的業(yè)務(wù)邏輯,如10個(gè)Delegate Class中的Method對應(yīng)10個(gè)Middle Man的Method)――Remove Middle Man,直接使用Delegate Class,可以部分使用Delegate Method。

 

 Move Method 如果一個(gè)類中的方法與另一個(gè)類有很多的交流,那么我們就在另一個(gè)類中建立一個(gè)有類似功能的新函數(shù),將舊函數(shù)變成一個(gè)單純的Delegating Method, 或是將舊函數(shù)移除。

 

類圖:

 

動(dòng)機(jī):

  1、如果一個(gè)類與另一個(gè)類有高度耦合,我就會(huì)Move Method。――class更簡單,更干凈利落的實(shí)現(xiàn)系統(tǒng)交付的任務(wù)。

  2、移動(dòng)一些值域,就要檢查是否使用另一個(gè)類的次數(shù)必使用所駐對象的次數(shù)還多。

 Move Field 狀況:你的class中的field被另一個(gè)class更多的用到。那么在另一個(gè)class里建立new field,修改舊的field。 

  Extract Class 狀況:一個(gè)類做了兩個(gè)類做的事,那么建立一個(gè)新Class,將相關(guān)的Field和Method從舊Class移到新Class。

 

 

 Inline Class 狀況:你的某個(gè)Class沒有做太多事情(沒有承擔(dān)足夠責(zé)任),那么將Class的所有特性搬移到另一個(gè)Class中,然后移除原Class。動(dòng)機(jī):Inline Class與Extract Class相反。――把Extract Class例子反過去,因?yàn)镻honeNumber只用作讀取code和number。  Hide Delegate 狀況:客戶直接調(diào)用Server Object的Delegate Class的Method,那么在Server端建立客戶所需的函數(shù)Method,用以隱藏委托關(guān)系。  學(xué)過對象技術(shù)的人都知道,雖然php允許你將field聲明為public,但你還應(yīng)該隱藏field(private)。隨著經(jīng)驗(yàn)日漸豐富,有更多值得封裝的東西。 看下面一個(gè)例子:

  $person->getDepartment()->getManager()明顯揭露了,要想找到Xiaocai的領(lǐng)導(dǎo),必須要經(jīng)過department,所以我們要做的事隱藏department。――可以減少耦合性。 

 

 Remove Middle Man 狀況:如果某個(gè)Class做了過多的Simple Delegate,那么我們就直接調(diào)用Delegate Class。動(dòng)機(jī):在Hide Delegate中的例子里當(dāng)Department有更多新方法的時(shí)候,我們?yōu)榱薍ide Delegate,就要必須在Person里添加相應(yīng)的方法做Delegate之用。這時(shí)候的Person完全變成了一個(gè)Middle Man,此時(shí)我們就應(yīng)該直接調(diào)用Delegate Class――Department。 重構(gòu)的意義就在于:你永遠(yuǎn)不必說對不起,只要你把出問題的地方修補(bǔ)好就行了。   

 

 Introduce Foreign Method 狀況:有一個(gè)類Client需要使用的類PreviousEnd中一個(gè)額外函數(shù),但你無法修改這個(gè)類PreviousEnd,那么你就在Client中建立一個(gè)函數(shù),并以一個(gè)PreviousEnd實(shí)體做為參數(shù)。

 

 Introduce Local Extention 狀況:你的Class需要一些額外函數(shù),但你不能修改當(dāng)前的類,那么建立一個(gè)新Class,使它包含這些函數(shù)。使用Subclass 或 Wrapper。――這個(gè)一般用于你無法修改源碼的情況下使用。  拿上面Introduce Foreign Method例子來說

使用Subclass方法 

或使用Wrapper

 總結(jié)

 需要注意一下,“Extract Class”和“Inline Class”,”Hide Delegate“和”Remove Middle Man",都是相反的過程,具體理解,可以看前言中的那張流程圖。 “Hide Delegate"我們常用于使用少量的”Delegate Method“的時(shí)候,而”Remove Middle Man“,用于調(diào)用很多”Delegate Method“的時(shí)候,我們可以直接使用Delegate Class,進(jìn)行調(diào)用,而有的Delegate Method我們視情況保留一部分。 “Extract Class”和“Inline Class”,"Extract Class"經(jīng)常用于承擔(dān)那過多責(zé)任而變得臃腫不堪的Class中,而“Inline Class”經(jīng)常用于當(dāng)前的這個(gè)類”太不負(fù)責(zé)的“時(shí)候使用。――我個(gè)人是寧愿“Extract Class”,也不愿“Inline Class”。

php技術(shù)PHP 雜談《重構(gòu)-改善既有代碼的設(shè)計(jì)》之二 對象之間搬移特性,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产51社区精品视频资源 | 国产福利专区精品视频 | xxxxx在线| 国产人成激情视频在线观看 | 国产精品视频分类 | 国产亚洲精品美女久久久久久2021 | 日本免费久久久久久久网站 | 51国产黑色丝袜高跟鞋 | 一级做a爰片性色毛片男 | 久久网站视频 | 六月婷婷视频 | 精品久久久久久无码中文字幕 | 欧美精品第1页www劲爆 | 日韩美女一区二区三区 | 999热成人精品国产免 | 最近2018中文字幕免费视频 | 婷婷激情综合 | 国产午夜精品福利久久 | 国产精品吹潮香蕉在线观看 | 国产综合成人亚洲区 | 成人福利在线观看 | 色婷婷丁香| 狠狠干一区 | 久久国产乱子免费精品 | 国产精品色婷婷在线观看 | 加勒比热 | 91久久九九精品国产综合 | 日本亚洲精品色婷婷在线影院 | 久久99国产精品免费观看 | 乱码一区 | 国产16页| 日本欧美一二三区色视频 | 午夜宅宅宅影院在线观看 | 悠悠色影院 | 精品午夜久久网成年网 | 成人在线综合网 | 日本欧美一区二区三区视频 | 五月四房 | 久久国产美女免费观看精品 | 久久精品*5在热 | 国产精品视频人人做人人爱 |