回答編集履歴

2

ソースコード追加

2015/08/24 03:17

投稿

MakotoMiyazaki
MakotoMiyazaki

スコア297

test CHANGED
@@ -1,4 +1,4 @@
1
- VBやC#のように~というのが、よくあるWeb系を知らないユーザの要望っぽく
1
+ VBやC#のように~というのが、よくあるWeb系を知らないユーザの要望(無理難題)っぽく
2
2
 
3
3
  見えてしまっていますが、おそらく単純に
4
4
 
@@ -38,6 +38,116 @@
38
38
 
39
39
  ぱっと見、formのsubmit毎にイベントが処理されているように作ることができます。
40
40
 
41
+ ```Java
42
+
43
+ public void exec() throws InstantiationException, IllegalAccessException {
44
+
45
+ String param = "foo";
41
46
 
42
47
 
43
48
 
49
+ ActionMapping m = ActionMapping.of(param);
50
+
51
+ if (m == null) {
52
+
53
+ // 404
54
+
55
+ return;
56
+
57
+ }
58
+
59
+
60
+
61
+ BaseAction action = m.getAction().newInstance();
62
+
63
+ action.execute();
64
+
65
+ }
66
+
67
+
68
+
69
+
70
+
71
+ public enum ActionMapping {
72
+
73
+
74
+
75
+ FOO("foo", FooAction.class);
76
+
77
+
78
+
79
+ private String param;
80
+
81
+ private Class<? extends BaseAction> action;
82
+
83
+
84
+
85
+ private ActionMapping(String param, Class<? extends BaseAction> action) {
86
+
87
+ this.param = param;
88
+
89
+ this.action = action;
90
+
91
+ }
92
+
93
+
94
+
95
+ public String getParam() {
96
+
97
+ return param;
98
+
99
+ }
100
+
101
+
102
+
103
+ public Class<? extends BaseAction> getAction() {
104
+
105
+ return action;
106
+
107
+ }
108
+
109
+
110
+
111
+ public static ActionMapping of(String param) {
112
+
113
+ for (ActionMapping m : ActionMapping.values()) {
114
+
115
+ if (m.getParam().equals(param)) {
116
+
117
+ return m;
118
+
119
+ }
120
+
121
+ }
122
+
123
+ return null;
124
+
125
+ }
126
+
127
+ }
128
+
129
+
130
+
131
+ public interface BaseAction {
132
+
133
+ void execute();
134
+
135
+ }
136
+
137
+
138
+
139
+ public class FooAction implements BaseAction {
140
+
141
+
142
+
143
+ @Override
144
+
145
+ public void execute() {
146
+
147
+ //リクエストごとの処理を記述する
148
+
149
+ }
150
+
151
+ }
152
+
153
+ ```

1

修正

2015/08/24 03:17

投稿

MakotoMiyazaki
MakotoMiyazaki

スコア297

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