第十八天
客串:屌絲的坑人表單神器
走過的那些事兒:數(shù)據(jù)庫那點事兒
起點:手把手教你做關(guān)鍵詞匹配項目(搜索引擎)---- 第一天
回顧:手把手教你做關(guān)鍵詞匹配項目(搜索引擎)---- 第十七天
上回說到小帥帥把代碼交給于老大時,于老大批了小帥帥,小帥帥真的感覺受委屈了。
我們回到站在技術(shù)總監(jiān)的角度看問題,技術(shù)總監(jiān)真的要做到監(jiān)管代碼的可讀行嗎?
我記得很多公司都是提倡利益,利益作為衡量一個技術(shù)總監(jiān)的價值。
技術(shù)總監(jiān)做錯了嗎?超出他的職責(zé)范圍了嗎?
其實于老大看到LinklistCharListHandle類里面exec方法出現(xiàn)了三層foreach,就把小帥帥給批了。
好嚴(yán)格的于老大,還是于老大對小帥帥的期望比較高。
小帥帥沒辦法,他只好把foreach盡量提取出來,小帥帥的版本:
class LinklistCharListHandle extends CharListHandle { public function exec(){ $sql = "select Word from category_linklist where cid='$this->selectorItem->cid'"; $linklist = DB::makeArray($sql); foreach($linklist as $strWords){ $words = explode(",",$strWords); $this->PRopertiesTransferCharlist($words); } } public function propertiesTransferCharlist($linkWords){ $properties = $this->selectorItem->getProperties(); foreach($properties as $property){ $this->charlist->addCore($property->value); if(in_array($property->value,$linkWords)){ $this->addCores($linkWords); } } } public function addCores($words){ foreach($words as $char){ $this->charlist->addCore($char); } }}小帥帥提取了兩個方法,使程序更加能夠看懂了。
其實小帥帥的的做法就是使用重構(gòu)-改善既有代碼的設(shè)計的技巧之一,Extract Method 提煉函數(shù)
Extract Method:將這段代碼放進一個獨立函數(shù)中,并讓函數(shù)名稱解析該函數(shù)的用途。
小帥帥很有成就感,繼續(xù)把代碼給于老大的時候,于老大提到了兩點。
1. propertiesTransferCharlist為什么要接受個參數(shù)。2. addCores到底是那個類的職責(zé)范圍。
小帥帥第2種他知道怎么做,他把該方法移到Charlist類里面,代碼如下:
<?phpclass CharList { private $core = array(); private $blacklist = array(); public function addCore($char){ if(!in_array($char,$this->core)) $this->core[] = $char; } public function addCores($words){ foreach($words as $char){ $this->addCore($char); } } public function getCore(){ return $this->core; } public function addBlacklist($char){ if(!in_array($char,$this->blacklist)) $this->blacklist[] = $char; } public function getBlacklist(){ return $this->blacklist; }}
其實小帥帥的這次做法還是使用重構(gòu)-改善既有代碼的設(shè)計的技巧之一,Move Method 搬移函數(shù)。
Move Method:在該函數(shù)最常引用的類中建立一個有著類似行為的新函數(shù)。將舊函數(shù)變成一個單純的委托函數(shù),或是將舊函數(shù)完全移除。
小帥實在搞不懂第1個怎么辦,又去請教于老大,于老大直接把代碼給了小帥帥,于老大的代碼為:
<?phpclass LinklistCharListHandle extends CharListHandle { private static $linklist; public function exec(){ $this->propertiesTransferCharlist(); } public static function linklist($cid){ if(!isset(self::$linklist) || !isset(self::$linklist[$cid]) || self::$linklist[$cid] == null){ $sql = "select word from category_linklist where cid='$cid'"; self::$linklist[$cid] = DB::makeArray($sql); } return self::$linklist[$cid]; } public function propertiesTransferCharlist(){ $properties = $this->selectorItem->getProperties(); foreach($properties as $property){ $this->charlist->addCore($property->value); $this->extendCharlist($property->value); } } public function extendCharlist($char){ $linklist = self::linklist($this->selectorItem->cid); foreach($linklist as $strWords){ $words = explode(",",$strWords); if(in_array($char,$words)){ $this->charlist->addCores($words); } } } }小帥帥看了,發(fā)表了一次感嘆,原來代碼隨便改變下,區(qū)別這么大,以前為啥從來沒有這感覺。
小帥帥真希望自己能夠獨單一面,不用天天去找于老大。
新聞熱點
疑難解答