妄想2のつ・づ・き♪


id:shinさんがオレオレフレームワークをご披露してくれたので、もう少し妄想2で続きを書きます。

妄想2、リアクションひじょーに薄いですがw、とっても重要な機能だと自分は思っています。

Webアプリケーションで押されたボタンが認識できないってのは非常に作ってて辛い。つーかもう個人的には無理です、それないと。


というわけで@ActionParamで押されたボタンが認識できるようになったのがその経緯。
(あくまで妄想ですよ!夢の中!)


そういう経緯もあって、こんな感じになりました。

	@POST
	@ActionParam
	public Navigation add(Context context) {
		//Validationはここらでお好きにどうぞ。
		Request request = context.getRequest();
		Integer arg1 = Integer.valueOf(request.getParameter("arg1"));
		Integer arg2 = Integer.valueOf(request.getParameter("arg2"));
		request.setAttribute("arg1", arg1);
		request.setAttribute("arg2", arg2);
		request.setAttribute("result", new Integer(arg1.intValue()
				+ arg2.intValue()));
		return Forward.to("jsp/add.jsp");
	}

requestの判断は最初はshot6さんと同じようにnameだけにしていたが、2度押し防止のために手軽に実装できるdisableをいれるscriptを
実装すると判断できないこと、1つのhiddenなパラメータを利用して画面遷移をコントロールするのが一番柔軟性があること、
ラジオボタン等の状態によって飛ぶ先をかえることが可能なこと、など柔軟性のためにnameとvalueを用意した。

おかげでhtmlとコードを見てすぐわかるというメリットがあった。アノテーションを使う場合メソッド名で判断させないほうが
コードを見ていてわかりやすいと思った。IDEで色づけしてくれるわけだし。

http://d.hatena.ne.jp/shin/20080529/p2#c

まずメソッド名などを有効利用するかどうかはちょっと悩んだんですが、メソッド名を使うのまではOKにしました。
この辺は賛否両論かなあと思います。明示的につけるのが好きな方もいるのはよく理解してるつもりなので。
なのでいずれrestrictな対処もできるようにするかもしれません。


あと、インタフェースを実装するモデルにしてGETとPOSTでデフォルトの挙動は必ずなんか書いてねってことに
当初しようかとおもってたんですが(この辺はYmirの影響かな)、ひとまずなくしました。
実はインタフェースとアノテーションの併用が実は現実解としてとてもバランスがよいんじゃないかという意見は
自分の中にまだあって、ただ今回は全体ポリシーを考えると採用しない感じかなあってところです。


当初はこんなん。

public class AaaPage implements Page {

	//デフォルトのGETの挙動
	public Navigation _get() {
		//...........
	}
}


あと、私はPageクラスのインスタンスモデルとしては、リクエストにマッピングされるのはやめました。
それよりはリクエストから何らかの形をしたインスタンスがわたってくるモデルのほうが
わかりやすいんじゃないかと思ったので。


Page自体をリクエストにマッピングしてしまうと、いつリクエストから適用されるかがわかりにくいのが難点じゃないかと思います。
それよりは明示的に引数でわたってきたものを自分でさばくほうが残された保守すべきコードとしては
やるべきことがはっきりしているのかなあ
と思うわけです。

JSFのようなイベントモデルをとらないで、こういうActionベースでの考え方の場合、あまり機能を増やさないほうが
結果的に融通が利いてやりやすい。必要ならばその上にかぶせればいいだけだし。

http://d.hatena.ne.jp/shin/20080529/p2#c


最近だとオレもそんな感じです。
かつActionベースでリクエストの何らかのインスタンスが引数でわたってくるモデルがお気に入りですね。
ただまだまだ重要な妄想部分を載せていないので、それはこれから徐々に載せていこうかなと
思ってます。


ちなみに今の妄想は、どれと比較してどこが素晴らしいとかそういうのは全くするつもりないです。
優位性なども比較で訴えない感じで。
なぜかというと自分が使いやすい・自分のまわりの人が使いやすい、それだけに集中するのがテーマのひとつだからです。
そこだけが大事だよね、結局。