回答編集履歴

2 ソースコード追加

MakotoMiyazaki

MakotoMiyazaki score 293

2015/08/24 12:17  投稿

VBやC#のように~というのが、よくあるWeb系を知らないユーザの要望っぽく
VBやC#のように~というのが、よくあるWeb系を知らないユーザの要望(無理難題)っぽく
見えてしまっていますが、おそらく単純に
「現在唯一サーブレットで条件分岐だらだら書いてるロジックを
1リクエスト1クラス(1メソッド)で処理させたいんだよね~」
という話ですよね。
であれば、単純にSpringフレームワークを導入して、リクエストURLと
Controllerのマッピングを行えば、リクエストごとの処理をクラスやメソッドに切り分けて
処理をすることができます。
今から外部FWの導入を検討するのは難しい、とか、どうしてもサーブレットは1つで処理させたい
(現状の動きはあまり壊したくない)ということであれば
・各画面の処理を記述するためのベースクラス(インターフェース)を用意する
・処理分岐用パラメータと、実処理クラスのマッピングを行う
 (enumにString param, BaseClass execClass みたいなフィールドを持たせる)
・処理分岐用パラメータから、実処理クラスを取得する
 (処理分岐用パラメータからenumを取得して、classをnewInstance()とかでインスタンス化する)
・ベースクラスのexecを呼ぶ
こんな感じにすれば、今If文で処理している個所を、別クラスに切り出して
ぱっと見、formのsubmit毎にイベントが処理されているように作ることができます。
```Java  
   public void exec() throws InstantiationException, IllegalAccessException {  
       String param = "foo";  
       ActionMapping m = ActionMapping.of(param);
       if (m == null) {
           // 404
           return;
       }
       BaseAction action = m.getAction().newInstance();
       action.execute();
   }
   public enum ActionMapping {
       FOO("foo", FooAction.class);
       private String param;
       private Class<? extends BaseAction> action;
       private ActionMapping(String param, Class<? extends BaseAction> action) {
           this.param = param;
           this.action = action;
       }
       public String getParam() {
           return param;
       }
       public Class<? extends BaseAction> getAction() {
           return action;
       }
       public static ActionMapping of(String param) {
           for (ActionMapping m : ActionMapping.values()) {
               if (m.getParam().equals(param)) {
                   return m;
               }
           }
           return null;
       }
   }
   public interface BaseAction {
       void execute();
   }
   public class FooAction implements BaseAction {
       @Override
       public void execute() {
                 //リクエストごとの処理を記述する
       }
   }
```
1 修正

MakotoMiyazaki

MakotoMiyazaki score 293

2015/08/24 12:07  投稿

VBやC#のように~というのが、よくあるWeb系を知らないユーザの要望っぽく
見えるのですが、おそらく単純に
見えてしまっていますが、おそらく単純に
「現在唯一サーブレットで条件分岐だらだら書いてるロジックを
1リクエスト1クラス(1メソッド)で処理させたいんだよね~」
という要望なのではないかと思います。
という話ですよね。
であれば、単純にSpringフレームワークを導入して、リクエストURLと
Controllerのマッピングを行えば、リクエストごとの処理をクラスやメソッドに切り分けて
処理をすることができます。
また、冗長化などを考えないのであれば、Tomcatのセッション機能を利用すれば
リクエスト間の情報共有もできますし、大規模システムで冗長化をしたいのであれば
DBセッションにするなどの対応もできます。この辺りは、Webシステムの基本ですね。
今から外部FWの導入を検討するのは難しい、とか、どうしてもサーブレットは1つで処理させたい
(現状の動きはあまり壊したくない)ということであれば
・各画面の処理を記述するためのベースクラス(インターフェース)を用意する
・処理分岐用パラメータと、実処理クラスのマッピングを行う
 (enumにString param, BaseClass execClass みたいなフィールドを持たせる)
・処理分岐用パラメータから、実処理クラスを取得する
 (処理分岐用パラメータからenumを取得して、classをnewInstance()とかでインスタンス化する)
・ベースクラスのexecを呼ぶ
こんな感じにすれば、今If文で処理している個所を、別クラスに切り出して
ぱっと見、formのsubmit毎にイベントが処理されているように作ることができます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る