谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

outjectionって分かりづらくね?

何って、Actionに作るgetterメソッドのことですよ。
Actionにgetterを作っておくと、S2Containerに管理されたり
管理対象じゃなければRequestスコープに入るわけですが。


S2JSFで最初に躓くのって、このoutjectionじゃないでしょうか。
outjectionにせず、requestにsetAttributeしてしまった方が
普通の開発者には分かりやすいのではないでしょうか。


つまり、public Hoge getHoge() って書くよりも、
request.setAttribute("hoge", hoge); って
書く方が分かりやすいのでは、ということです。


少なくともActionを書いている時には
オブジェクトのライフサイクルは「考える」でしょうから
「FW側でライフサイクルを変更できる」というメリットは、
実質、享受されないでしょう。


HttpServletRequestを渡すのが嫌なら、みんな大好き俺様Requestで。
RequestScope.set("hoge", hoge); と書けばOK、みたいな。


ついでに、injectionとかもやめちゃって、requestパラメータは引数渡し。
引数名はARGSアノテーションで指定すれば良いのではないでしょうか。


つまり、こんな風にしちゃえばいいと思うんですよ。

@ARGS({"userId", "dto"})
public String doHoge(String userId, XxxDto dto)
{
	List groupList = xxxService.find(userId, dto);
	RequestScope.set("groupList", groupList);

	return "hoge2";
}

xxxServiceだけはテストしやすいようinjectionされます。
別に、publicでも構わないでしょう。


あと、DiiguとかIrenkaとか使えば
引数名も取れるようになるのかな?

public String doHoge(String userId, XxxDto dto)
{
	List groupList = xxxService.find(userId, dto);
	RequestScope.set(groupList);

	return "hoge2";
}

こんな風になると、分かりやすいのではないでしょうか。


Pageクラス(≒HTMLのJava化)という概念ならまだしも
通常のStrutsライクなアーキテクチャなら
このように、引数の明確化、スコープの明確化を
行なった方が分かりやすいかな、と思いました。


では、Pageクラスが主流となった現在は、
どんな風に書けば分かりやすいのでしょうか。


それについてはATDK