Struts Best Practices

http://www.jaxmag.com/itr/online_artikel/psecom,id,648,nodeid,147.html

要旨を簡単にまとめてみます。多少意訳や誇張も含んでいますので正確なところは原文をあたって下さい。

共通機能をまとめるために 中間 Actionクラスを用意するとよい。

例えばユーザ認証機能などは,ユーザからのリクエストの度に呼ばれるわけですが,いちいち execute()メソッドに書くのはコードが重複してしまってよくない!ということで,中間 Actionクラスにその処理を追加し,他の Actionクラスはこの中間 Actionクラスを継承するという方法。したがってorg.apache.struts.action.Actionを継承するのは中間 Actionクラスになります。

関係するアクションを 1つのクラスにグルーピングすべく DispatchActionを使おう

オンラインショッピングアプリケーションを考えたとき,カートの商品の追加,削除,更新といった機能が必要になります。単純に考えるとこれらの機能 1つ 1つに対して Actionクラスを割り当てて excute()メソッドで実装することになりますが,それってなんかいやです。関係するアクションは 1 Actionクラスにまとめて管理したいです,というときに使うクラス。

フォームの 2重送信を防ぐ

注文確定ボタンを間違って 2回クリックしてしまって,2重注文になってしまった,というような悲しい状況を回避するための方法。サーバ側とクライアント側のトークンの比較をおこないます。2度目のクリックではクライアント側のトークンは変化していないけどサーバ側のトークンが変化しているので,そこで処理の振り分けができます。使用する APIは saveToken()と isTokenValid()です。

アプリケーションモジュールを使って平行開発する

大規模アプリケーション開発ではアプリケーションを複数モジュールに分割して,それぞれのモジュールを平行開発できると開発効率の面でハッピーなわけですが,モジュールが分割できても設定ファイルが 1つのままではそこがボトルネックになってしまい何もうれしくありません。ということでモジュールごとに設定ファイルを切り分けて開発することができるような struts-config.xmlの書き方のお話。

類似するフォームは 1つの ActionFormにまとめる

使用される可能性のあるフィールドをすべて持った 1つの ActionFormにまとめます。すべてのフィールドを同時に使うことはないかもしれないけどそれでもいいです。メンテナンスの容易性が最優先。

冗長なフォワードを避けるために global-forwardsを使おう

例えばオンラインショッピングアプリケーションで,セッションタイムアウト時にはログインページに遷移させるべきですが,そのルールをすべての Actionに書くのは冗長です。global-forwardsを使えば 1箇所で済みます。

ビジネスロジックは Actionクラスに実装しない

Actionはそういうことをする場所ではないです。モデル層に委譲したほうがいいです。

Actionクラスではインスタンス変数やクラス変数は使わない

複数スレッドから予期しないタイミングで更新されるのを避けるためです。

ActionFormsはモデルではない

ActionFormは HTMLフォームを表現するためのもので,ビューとコントローラの間で Strutsによってデータをやりとりするために使います。モデル層と混同しちゃだめです。

「Struts Best Practices」への1件のフィードバック

  1. とても勉強になりました。「ビジネスロジックはActionクラスに実装しない」というのが、理解できなかったので、勉強してみようと思います。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください