色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

PHP 雜談《重構(gòu)-改善既有代碼的設(shè)計(jì)》之三 重新組織數(shù)據(jù)

思維導(dǎo)圖


介紹

  承接上文的php 雜談《重構(gòu)-改善既有代碼的設(shè)計(jì)》之 重新組織你的函數(shù)繼續(xù)重構(gòu)方面的內(nèi)容。 這章主要針對(duì)數(shù)據(jù)的重構(gòu)。 1、爭(zhēng)論的聲音――直接訪問(wèn)Field還是通過(guò)函數(shù)(Accessor)訪問(wèn)Field

 2.修改Array為Object:當(dāng)你看到一個(gè)Array很像一個(gè)數(shù)據(jù)結(jié)構(gòu),你可以使用Replace Array with Object,把Array變成一個(gè)對(duì)象。――數(shù)據(jù)結(jié)構(gòu)更清晰。

   專(zhuān)業(yè)術(shù)語(yǔ) 

accessor:訪問(wèn)者,存儲(chǔ)器――在本文翻譯為“函數(shù)”

dumb:啞

domain class:用以處理業(yè)務(wù)邏輯

presentation class:用以處理”數(shù)據(jù)表現(xiàn)形式“

business logic:業(yè)務(wù)邏輯

unidirectional:?jiǎn)蜗虻?/P>

bidirectional:雙向的

collection:群集

 Self Encapsulate Field 狀況:如果Client直接訪問(wèn)值域,會(huì)造成Client與值域之間的耦合關(guān)系逐漸變得笨拙,那么為這個(gè)值域建立取值/設(shè)置函數(shù),并且只以這些函數(shù)來(lái)訪問(wèn)。 

 

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

  “間接訪問(wèn)變量”:支持更靈活的數(shù)據(jù)獲取方式,如lazy Initialization(意思是只有用到值時(shí),才對(duì)它進(jìn)行初始化。)

  “直接訪問(wèn)變量”:代碼比較容易閱讀,不需要停下來(lái)說(shuō):“啊,這只是個(gè)取值函數(shù)”。

       選擇:1、代碼規(guī)范,按照?qǐng)F(tuán)隊(duì)中大多數(shù)人的做法去做。

     2、個(gè)人比較喜歡“直接訪問(wèn)變量”,直到這種方式帶來(lái)麻煩為止。

       martin(作者)的例子:你想獲取superclass中的field,卻又想在subclass中將該field改為計(jì)算后的值,這就最該使用Self Encapsulate Field。

                         我自己的例子:我一般會(huì)把field設(shè)置成private,如果外部變量,需要用到此field的時(shí)候,我就會(huì)用Self Encapsulate Field。或者field的值有變化的時(shí)候,用Self Encapsulate Field。


 Replace Data Value with Object  狀況:如果你的某個(gè)基本類(lèi)型的field,需要額外的數(shù)據(jù)和行為,那么將此field變成對(duì)象。 

 

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

開(kāi)發(fā)初期,我們也許會(huì)使用基本數(shù)據(jù)類(lèi)型表示簡(jiǎn)單的行為。例如:你可能會(huì)用一個(gè)字符串表示電話號(hào)碼,但是隨后可能會(huì)出現(xiàn)電話號(hào)碼的“格式化“,”驗(yàn)證“,”抽取區(qū)號(hào)“之類(lèi)的特殊行為。――這時(shí)候我們就需要一個(gè)新類(lèi)。

  Replace Array with Object 狀況:你有一個(gè)數(shù)組,數(shù)組中的元素各自代表不同的東西,那么以對(duì)象替換數(shù)組,對(duì)于數(shù)組中的每個(gè)元素,以一個(gè)值域表示之。 

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

數(shù)組常用于一組相似對(duì)象。如果數(shù)組中的元素不同,很難明白數(shù)組中的第一個(gè)元素是人名這樣的約定。對(duì)象就不同了,可以通過(guò)值域名稱(chēng)和函數(shù)名稱(chēng)傳達(dá)這樣的信息。――這樣無(wú)須死記,無(wú)須注釋。

 Encapsulate Field 狀況:如果你的class中有一個(gè)public值域,那么將它聲明為pirvate,并提供相應(yīng)的訪問(wèn)函數(shù)。

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

面向?qū)ο蟮脑瓌t之一就是封裝(Encapsulate)或者稱(chēng)為”數(shù)據(jù)隱藏“。按照此原測(cè),你絕不應(yīng)該把數(shù)據(jù)聲明為public。  ――public 數(shù)據(jù)被看成是一種不好的做法。  ――如果封裝了,代碼的修改就會(huì)比較簡(jiǎn)單,因?yàn)槎技性谝粋€(gè)地方。 一個(gè)函數(shù)除了訪問(wèn)函數(shù)(getting/setting)外,不提供其他行為,它終究只是一個(gè)dumb class(啞類(lèi))。這類(lèi)class不能獲得對(duì)象技術(shù)的優(yōu)勢(shì)。――解決啞類(lèi)的方法是Move Method輕快的將它們移到新對(duì)象去。  conclusion 我希望能把我理解的東西與大家分享,歡迎大家提出寶貴意見(jiàn)。

php技術(shù)PHP 雜談《重構(gòu)-改善既有代碼的設(shè)計(jì)》之三 重新組織數(shù)據(jù),轉(zhuǎn)載需保留來(lái)源!

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

主站蜘蛛池模板: 邯郸市| 遂昌县| 区。| 厦门市| 互助| 毕节市| 凤凰县| 大足县| 贺兰县| 贵州省| 囊谦县| 龙州县| 东台市| 资中县| 北票市| 龙口市| 滁州市| 犍为县| 瑞昌市| 水城县| 秀山| 灌阳县| 宾川县| 毕节市| 仁寿县| 天台县| 当涂县| 静安区| 安达市| 阜南县| 嵩明县| 渭源县| 烟台市| 阆中市| 天祝| 开阳县| 即墨市| 孝感市| 平顶山市| 洪洞县| 陈巴尔虎旗|