2011-08-15 9 views
3

私はサーブレットを持っています。サーブレットは、20種類以上の異なるリクエスト(サーブレット内のコマンドと呼ばれます)を受け入れることができます。長いサーブレットのリファクタリング条件付き

if (command.equals("Command1")) 
    doSomething(); 
else if (command.equals("Command2)) 
    doSomethingElse(); 
else if (command.equals("Command3)) 
    doThisOtherThing(); 
...... 

このコードを書くには、より良い方法がありますか?非常に大きな条件が作成されました。私はJUnitテストに関する本を読んでいますが、これは条件式より多型を使用することを示唆していますが、この例ではこれを行う方法が分かりません。誰か良いアイデアはありますか?

あなたがサーブレットを使用している、あなたが探していることはFrontControllerであることを考えると

エリオット

+0

コマンドパターンがあります。あなたのケースでは役に立つかもしれません。パターンがあなたの場合には必要ではないかもしれないメソッド呼び出しをカプセル化するので、有用かもしれないことを暗示しました。 –

答えて

4

、ありがとうございます。基本的な考え方はシンプルで、あなたが持っているこれらのコマンド文字列のそれぞれはマップにマップされ、これらのコマンドにアクションを渡します。

A本当に単純な実装は、次のようになります。これがあれば/スイッチを持つことの必要性を取り除き、あなたは各コマンドは、特定のクラスであること、あなたのコードの組織を改善することができます

Command commandAction = this.commands.get(command); 
commandAction.doAction(request, response); 

明らかに、これはStruts、SpringMVC、VRaptor、PlayのようなJavaのすべてのWeb MVCフレームワークがこのパターンを実装し、この機能をあなたに無料で提供しているため、ホイールを再発明しています。純粋なサーブレットと一緒に滞在し、独自のWebフレームワークを構築してください。