程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 手把手教你做關鍵詞匹配項目(搜索引擎)---- 第十八天,教你做第十八天

手把手教你做關鍵詞匹配項目(搜索引擎)---- 第十八天,教你做第十八天

編輯:關於PHP編程

手把手教你做關鍵詞匹配項目(搜索引擎)---- 第十八天,教你做第十八天


第十八天

客串:屌絲的坑人表單神器

走過的那些事兒:數據庫那點事兒

起點:手把手教你做關鍵詞匹配項目(搜索引擎)---- 第一天

回顧:手把手教你做關鍵詞匹配項目(搜索引擎)---- 第十七天

上回說到小帥帥把代碼交給於老大時,於老大批了小帥帥,小帥帥真的感覺受委屈了。

我們回到站在技術總監的角度看問題,技術總監真的要做到監管代碼的可讀行嗎?

我記得很多公司都是提倡利益,利益作為衡量一個技術總監的價值。

技術總監做錯了嗎?超出他的職責范圍了嗎?

其實於老大看到 LinklistCharListHandle類裡面exec方法出現了三層foreach,就把小帥帥給批了。

好嚴格的於老大,還是於老大對小帥帥的期望比較高。

小帥帥沒辦法,他只好把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);
        }
    }
}

小帥帥提取了兩個方法,使程序更加能夠看懂了。

其實小帥帥的的做法就是使用重構-改善既有代碼的設計的技巧之一,Extract Method 提煉函數

 

Extract Method:將這段代碼放進一個獨立函數中,並讓函數名稱解析該函數的用途。

 

小帥帥很有成就感,繼續把代碼給於老大的時候,於老大提到了兩點。

1. propertiesTransferCharlist為什麼要接受個參數。
2. addCores到底是那個類的職責范圍。


小帥帥第2種他知道怎麼做,他把該方法移到Charlist類裡面,代碼如下:

<?php
class 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;
    }
}

其實小帥帥的這次做法還是使用重構-改善既有代碼的設計的技巧之一,Move Method 搬移函數。

 

Move Method:在該函數最常引用的類中建立一個有著類似行為的新函數。將舊函數變成一個單純的委托函數,或是將舊函數完全移除。

 

小帥實在搞不懂第1個怎麼辦,又去請教於老大,於老大直接把代碼給了小帥帥,於老大的代碼為:

<?php
class 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);
            }
        }
        
    }    
}

小帥帥看了,發表了一次感歎,原來代碼隨便改變下,區別這麼大,以前為啥從來沒有這感覺。

 

小帥帥真希望自己能夠獨單一面,不用天天去找於老大。

 




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved