Super Agile Struts開発記その7 - ActionFormの分離
SAStrutsでは、ActionとActionFormは、基本的に同じクラスで実装しますが、複数のActionで同じActionFormを共有したくなることもあるでしょう。
その場合、ActionFormをPOJOのDTOで作成し、Actionのプロパティに@ActionFormアノテーションをつけます。
複数のActionで一つのActionFormを共有するとき、ActionFormはセッションにおきたいことが多いはずです。その場合は、DTOに@Componenent(instance=InstanceType.SESSION)と指定します。この辺の機能は、SAStrutsではなく、Seasar2の機能です。
public class HogeAction {
@ActionForm
public HogeDto hogeDto;
...
}
追記:http://d.hatena.ne.jp/higayasuo/20071204#c1196772533に対するコメント。
@Componenent(instance = InstanceType.SESSION)
public class HogeDto {
...
}
Actionは、振る舞いが中心で、必要ならパラメータも受け取ることができるだけなので、セッションに置くのは、役割が違う気がします。
例えばユースケース(サブ機能?)において、
共通のフォームが多数存在するような場合は、
TeedaのPageクラスのように継承を用いることも
物理的には可能(親クラスにpublicフィールド)かと思うのですが、
そのようなアプローチは推奨しない方針でしょうか??
個人的にはDTOに切り出した方がわかりやすい
(Strutsっぽい)のですが、
ひがさんの御意見を聞いてみたいなぁとwその場合はそれぞれの子アクションでスコープを指定
(InstanceType.SESSION)?
後、ActionにはAOPをかけることが十分考えられますが、Seasar2的には、AOPのかかったオブジェクトをセッションにおくことができません。