teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

ソースコード追加

2015/08/24 03:17

投稿

MakotoMiyazaki
MakotoMiyazaki

スコア297

answer CHANGED
@@ -1,4 +1,4 @@
1
- VBやC#のように~というのが、よくあるWeb系を知らないユーザの要望っぽく
1
+ VBやC#のように~というのが、よくあるWeb系を知らないユーザの要望(無理難題)っぽく
2
2
  見えてしまっていますが、おそらく単純に
3
3
  「現在唯一サーブレットで条件分岐だらだら書いてるロジックを
4
4
  1リクエスト1クラス(1メソッド)で処理させたいんだよね~」
@@ -18,4 +18,60 @@
18
18
  ・ベースクラスのexecを呼ぶ
19
19
  こんな感じにすれば、今If文で処理している個所を、別クラスに切り出して
20
20
  ぱっと見、formのsubmit毎にイベントが処理されているように作ることができます。
21
+ ```Java
22
+ public void exec() throws InstantiationException, IllegalAccessException {
23
+ String param = "foo";
21
24
 
25
+ ActionMapping m = ActionMapping.of(param);
26
+ if (m == null) {
27
+ // 404
28
+ return;
29
+ }
30
+
31
+ BaseAction action = m.getAction().newInstance();
32
+ action.execute();
33
+ }
34
+
35
+
36
+ public enum ActionMapping {
37
+
38
+ FOO("foo", FooAction.class);
39
+
40
+ private String param;
41
+ private Class<? extends BaseAction> action;
42
+
43
+ private ActionMapping(String param, Class<? extends BaseAction> action) {
44
+ this.param = param;
45
+ this.action = action;
46
+ }
47
+
48
+ public String getParam() {
49
+ return param;
50
+ }
51
+
52
+ public Class<? extends BaseAction> getAction() {
53
+ return action;
54
+ }
55
+
56
+ public static ActionMapping of(String param) {
57
+ for (ActionMapping m : ActionMapping.values()) {
58
+ if (m.getParam().equals(param)) {
59
+ return m;
60
+ }
61
+ }
62
+ return null;
63
+ }
64
+ }
65
+
66
+ public interface BaseAction {
67
+ void execute();
68
+ }
69
+
70
+ public class FooAction implements BaseAction {
71
+
72
+ @Override
73
+ public void execute() {
74
+ //リクエストごとの処理を記述する
75
+ }
76
+ }
77
+ ```

1

修正

2015/08/24 03:17

投稿

MakotoMiyazaki
MakotoMiyazaki

スコア297

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