2013-09-10 68 views
0

我有每個命令具有類似的結構(語法分析,驗證,執行,確認/錯誤)命令解析器,但他們都做不同的事情(開,關,addnote,changestatus)。分析器與結構(PHP)

我被要求更改錯誤消息,並且必須單獨做所有的命令相同的變化,因爲它們都具有不同的參數,並從數據庫中不同的表拉。但他們大多都是一樣的。有沒有更簡單的方法來做到這一點? (而不是開關盒和硬編碼所有命令)

我知道還有更多的改變來了,我寧願不復制/粘貼,每次更改2個單詞到每個命令,特別是因爲我知道他們要仔細的命令數...

validate($commands){ 
foreach($commands as $command){ 
    switch($command['name']){ 
    case 'close': 
     validateClose($command); 
     break; 
    case 'addnote: 
     validateAddnote($command); 
     break; 
    ... 
    } 
    } 
} 

execute($commands){ 
foreach($commands as $command){ 
    switch($command['name']){ 
    case 'close': 
     executeClose($command); 
     break; 
    case 'addnote: 
     executeAddnote($command); 
     break; 
    ... 
    } 
    } 
} 

validateClose($command){ 
    // parse here for parameters, 3 
    // validate parameters 
    $command['valid'] = $validated; 
    if(!$validated) 
    $message = "Invalid because..."; 
} 

validateAddnote($command){ 
    // parse here for parameters, 1 
    // validate parameters 
    $command['valid'] = $validated; 
    if(!$validated) 
    $message = "Invalid because..."; 
} 

... 

executeClose($command){ 
    $db->status('close', params); 
    $message = "closed x with {params}"; 
} 

executeAddnote($command){ 
    $db->add('note', param); 
    $message = "Added {param} as note to x"; 
} 

... 
+0

當沒有代碼示例或演示你在做什麼時,很難提供幫助。 – Rottingham

回答

0

我已經決定去與抽象,併爲命令一類的抽象類,併爲每個命令一個子類。

我拋出了開關,並使用變量類名稱來創建每個命令的實例。

這些變化真的清理東西,使其更具可讀性,並使其更加靈活,並很容易地改變一個單一的命令,或所有命令一次沒有重複。