У меня есть синтаксический анализатор команд, который имеет одну и ту же структуру (разбор, проверка, выполнение, подтверждение/ошибка), но все они делают что-то другое (open, close, 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";
}
...
ОЧЕНЬ сложно помочь, если нет примеров кода или демонстрации того, что вы делаете. – Rottingham