パワービーンズ・デザインパターン
Contents
- デザインパターンを導入する意義
- モデル、ビーン等の情報を保持するためのクラス
- 値だけを定義するインターフェースの使用の禁止
- ビジネス・ロジックのフレームワーク概要
- ビジネス・ロジックのフレームワーク定義ファイルについて
パワービーンズ・デザインパターン
ここではパワービーンズの設計、開発におけるデザインパターンについて ご報告いたします。
デザインパターンを導入する意義
フレームワークを利用したMVC構造だけでは不十分です。 これだけでは、プログラマーのスキルによりプログラムに凸凹ができてします。 スキルの高いプログラマーはアクションクラスを拡張してしまったり、 スキルの低いプログラマーは全ての処理をアクションクラスにコーディングしてしまったり プログラムが非常に見通しの悪いシステムとなってしまいます。 そのためにも、技術者のスキルによりプログラムがまちまちになってしまわぬように デザインパターンを導入しプログラムが統一するようにする必要があります。
(1) メリット その結果として一応に統一の取れた保守性と透過性に 優れたシステムを構築することができます。
(2) デメリット ちょっとしたプログラムでもデザインパターンを適用しなくてはいけないので、 かえってコーディング数が増えてしまう。
(3) デメリットの解消 パワービーンズでは弊社で開発いたしましたコードゼネレータを 使って生産性の向上を計っております。
モデル、ビーン等の情報を保持するためのクラス
値オブジェクト(Value Object)、データ転送オブジェクト(JTO)といった重要なモデルや ビーン等に対しては最低限、以下のようなメソッドを実装して下さい。
(1) equalメソッド オブジェクト同士の整合性を比較するためのメソッド。
(2) toStringメソッド そのオブジェクトのダンプを取るためのメソッド。トレース、ログ出力などに使ったりします。
(3) validateメソッド そのオブジェクトの妥当性を検証するためのメソッド。
Note これを実現するには「インターフェース」、または、「abstructクラス」を 作成して、それを継承するようにして下さい。
例:
値だけを定義するインターフェースの使用の禁止
値だけを定義する場合にはインターフェースではなく、コンストラクタをプライベートにした クラスを作成してください。これはJAVAに未熟なプログラマがわざわざインスタンスを生成して、 そのインスタンスから定義変数を参照するのを未然に防ぐためです。
(1) インターフェース 例えば次のような値だけを定義しているインターフェースは「(2) クラス」のようにします。
package jp.co.powerbeans.poweroffice.administrator.util;
public interface CommKeys
{
public static final String BUTTON_ACTION_NOTHING = "nothing";
public static final String BUTTON_ACTION_STORE = "store";
public static final String BUTTON_ACTION_CREATE = "create";
public static final String BUTTON_ACTION_REMOVE = "remove";
public static final String BUTTON_ACTION_CANCEL = "cancel";
}
(2) クラス コンストラクタをprivateにしておきます。
package jp.co.powerbeans.poweroffice.administrator.util;
public class CommKeys
{
private CommKeys()
public static final String BUTTON_ACTION_NOTHING = "nothing";
public static final String BUTTON_ACTION_STORE = "store";
public static final String BUTTON_ACTION_CREATE = "create";
public static final String BUTTON_ACTION_REMOVE = "remove";
public static final String BUTTON_ACTION_CANCEL = "cancel";
}
ビジネス・ロジックのフレームワーク概要
「J2EE Blueprints 1.4」のデザイン・パターンを基にStrutsを組み合わせた フレームワークになっています。
ビジネス・ロジックのフレームワーク定義ファイルについて
このフレームワークでの定義ファイルは「mappings.xml」だけとなります。
* 操作アクション(IFlowAction)が実行される前に処理しておきたい処理の定義(省略可)。 * WEB画面での操作と、その操作との対応する操作アクション(IFlowAction)との関連を定義。 * EJB層へ通知するイベント(Event)と、EJB層で処理するビジネスロジック・アクション(IEJBAction)との関連の定義。
[WEB層の操作アクション(IFlowAction)定義一部抜粋]
<url-mapping url="/administrator/admmstquestion">
<implement-plugin>
<run-plugin sequence="1" plugin="jp.co.powerbeans.poweroffice.administrator.waf.AdmMstQuestion.run.AdmMstQuestionRun1"/>
<run-plugin sequence="2" plugin="jp.co.powerbeans.poweroffice.administrator.waf.AdmMstQuestion.run.AdmMstQuestionRun2"/>
<run-plugin sequence="3" plugin="jp.co.powerbeans.poweroffice.administrator.waf.AdmMstQuestion.run.AdmMstQuestionRun3"/>
</implement-plugin>
<flow-handler class="jp.co.powerbeans.poweroffice.administrator.waf.AdmMstQuestion.flow.AdmMstQuestionFlowHandler">
<handler-result result="STORE_ACTION" action="jp.co.powerbeans.poweroffice.administrator.waf.AdmMstQuestion.actions.AdmMstQuestionStoreFlowAction"/>
<handler-result result="CREATE_ACTION" action="jp.co.powerbeans.poweroffice.administrator.waf.AdmMstQuestion.actions.AdmMstQuestionCreateFlowAction"/>
<handler-result result="REMOVE_ACTION" action="jp.co.powerbeans.poweroffice.administrator.waf.AdmMstQuestion.actions.AdmMstQuestionRemovmeFlowAction"/>
<handler-result result="CANCEL_ACTION" action="jp.co.powerbeans.poweroffice.administrator.waf.AdmMstQuestion.actions.AdmMstQuestionCancelFlowAction"/>
</flow-handler>
</url-mapping>
[EJB層のイベント(Event)とEJBアクション(IEJBAction)定義一部抜粋]
<event-mapping>
<event-class>jp.co.powerbeans.poweroffice.administrator.waf.AdmMstQuestion.events.AdmMstQuestionEvent</event-class>
<ejb-action-class>jp.co.powerbeans.poweroffice.administrator.waf.AdmMstQuestion.ejb.AdmMstQuestionEJBAction</ejb-action-class>
</event-mapping>
|