|
介紹
accessor:訪問者,存儲(chǔ)器――在本文翻譯為“函數(shù)”
dumb:啞
domain class:用以處理業(yè)務(wù)邏輯
presentation class:用以處理”數(shù)據(jù)表現(xiàn)形式“
business logic:業(yè)務(wù)邏輯
unidirectional:單向的
bidirectional:雙向的
collection:群集
Self Encapsulate Field 狀況:如果Client直接訪問值域,會(huì)造成Client與值域之間的耦合關(guān)系逐漸變得笨拙,那么為這個(gè)值域建立取值/設(shè)置函數(shù),并且只以這些函數(shù)來訪問。
動(dòng)機(jī):
“間接訪問變量”:支持更靈活的數(shù)據(jù)獲取方式,如lazy Initialization(意思是只有用到值時(shí),才對它進(jìn)行初始化。)
“直接訪問變量”:代碼比較容易閱讀,不需要停下來說:“啊,這只是個(gè)取值函數(shù)”。
選擇:1、代碼規(guī)范,按照團(tuán)隊(duì)中大多數(shù)人的做法去做。
2、個(gè)人比較喜歡“直接訪問變量”,直到這種方式帶來麻煩為止。
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è)基本類型的field,需要額外的數(shù)據(jù)和行為,那么將此field變成對象。
開發(fā)初期,我們也許會(huì)使用基本數(shù)據(jù)類型表示簡單的行為。例如:你可能會(huì)用一個(gè)字符串表示電話號碼,但是隨后可能會(huì)出現(xiàn)電話號碼的“格式化“,”驗(yàn)證“,”抽取區(qū)號“之類的特殊行為。――這時(shí)候我們就需要一個(gè)新類。
Replace Array with Object 狀況:你有一個(gè)數(shù)組,數(shù)組中的元素各自代表不同的東西,那么以對象替換數(shù)組,對于數(shù)組中的每個(gè)元素,以一個(gè)值域表示之。動(dòng)機(jī):
數(shù)組常用于一組相似對象。如果數(shù)組中的元素不同,很難明白數(shù)組中的第一個(gè)元素是人名這樣的約定。對象就不同了,可以通過值域名稱和函數(shù)名稱傳達(dá)這樣的信息。――這樣無須死記,無須注釋。
Encapsulate Field 狀況:如果你的class中有一個(gè)public值域,那么將它聲明為pirvate,并提供相應(yīng)的訪問函數(shù)。動(dòng)機(jī):
php技術(shù):PHP 雜談《重構(gòu)-改善既有代碼的設(shè)計(jì)》之三 重新組織數(shù)據(jù),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。