StrutsはMVC2パターンになっているのかな?
Struts1.xとMVCの対応について誤解
時間がなかったのもあるのだけれど、Strustで登場するクラスとMVCの関連で認識が間違っていた。
- ViewはJSPだと思ってた(正解)
- ModelはActionFormと思ってた(不正解)
- ControllerはActionだと思ってた(不正解)
そこで、StrutsとMVCパターンの対応表をまとめてみた。

- ViewはJSPで表現されている
- Modelはビジネスロジック部分。VO、DAO、処理を実際に行うJavaBeansが含まれる
- ModelはActionによって生成される
- ControllerはActionServletがstruts-config.xmlを元に行ってくれる
- ActionFormはViewとController(もしくはその逆もかな)をつなぐもの
- ActionFormはデータ転送の役割を持つ
- ActionはActionServletとビジネスロジックとのアダプタクラス
- Actionはコントロールされるクラス
- Actionはビジネスロジックを呼び出してModelオブジェクトを返す
設計してみる
今までは、Actionクラスにビジネスロジックを書いていたが、これだと、Strutsでしか使えないビジネスロジックになるのが問題なのかもしれない。これらをふまえて、MVCパターンを活用するとすると、こんな感じになった。
Actionクラス内では処理するデータ抜き出し、ビジネスロジックに渡して処理してもらう。結果はVOでもらい、ActionFormに設定しなおす。これでアダプタっぽく動くActionになる。formを渡すとStruts部分がビジネスロジックに影響するのでこうしてみた。
VO input = form.getVO(); BusinessLogic logic = new BusinessLogic(); VO result = logic.execute(input);
他にも、それぞれのBisinessLogicクラスを管理するManagerを作って、インスタンスをロジックに対して1つだけ作って使いまわしてくれる・・・っててもあるな。
上記では、formがVOを返したりするのだけれど、「formは純粋にパラメタの受け渡しだけだ!」とするなら、
VOMgr mgr = new VOMgr(form); VO vo = mgr.getVO();
みたいにして、form用アダプタを作ってもいいかもかも。