我有一个命令解析器,每个命令都具有相似的结构(解析、验证、执行、确认/错误),但它们都做不同的事情(打开、关闭、addnote、changestatus)。
我被要求更改错误消息,并且必须分别对所有命令进行相同的更改,因为它们都有不同的参数并从数据库中的不同表中提取。但它们几乎都是一样的。有没有更简单的方法来做到这一点?(而不是开关盒和硬编码所有命令)
我知道还有更多的变化,我宁愿不复制/粘贴,每次为每个命令更改 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";
}
...