0

各コマンドが同様の構造(解析、検証、実行、確認/エラー)を持つコマンドパーサーを持っていますが、それらはすべて異なることをします(開く、閉じる、addnote、changestatus)。

エラー メッセージを変更するように求められ、すべてのコマンドに同じ変更を個別に行う必要がありました。これらのコマンドはすべて異なるパラメーターを持ち、データベース内の異なるテーブルからプルするためです。しかし、それらはすべてほとんど同じです。これを行う簡単な方法はありますか?(switch-case やすべてのコマンドをハードコードするのではなく)

さらに変更が加えられることはわかっており、特にコマンドの数を 2 倍にしたいことがわかっているため、コピー/貼り付けはせず、毎回各コマンドに 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";
}

 ...
4

1 に答える 1

0

抽象化を使用して、コマンドごとに抽象クラスと子クラスを持つコマンドのクラスを作成することにしました。

スイッチを捨てて、変数クラス名を使用して各コマンドのインスタンスを作成しています。

これらの変更により、本当にきれいになり、読みやすくなり、柔軟性が向上し、単一のコマンドまたはすべてのコマンドを繰り返しなしで一度に簡単に変更できるようになりました。

于 2013-09-12T23:41:30.867 に答える