開発パターン
wisdomでは多くのクラス・パッケージが存在しています。各パッケージの使用用途の概略をご説明します。
コマンドクラス、トランザクション、リクエスト、セッションへのアクセス方法を定義したインターフェース、抽象クラスを含めた
パッケージです。MVCパターンはこのパッケージクラスのクラスを使用することで完結するように設計されています。開発を行ううえ
でこれらのクラスはJavaDocを参照して挙動を理解しておく必要があります。
IRequestCommand
Webで実行するコマンドを定義したインターフェース。
AbstractRequestCommandを継承することにより実装されますので意識する必要はありません。
IRequestParser
javax.servlet.http.HttpServletRequestを解析するためのインターフェース。
パラメータへのアクセス、添付ファイルの取得方法などを定義しています。AbstractRequestCommandの実行時に生成されインスタンス変数として使用することができます。
IRequestHandler
IRequestCommandの実行中に使用できるアプリケーション情報、資源にアクセスする方法を定義したインターフェース。
IRequestCommand実行中のパラメータ属性の設定、データ・ソースへの接続、トランザクション管理、セッション情報へのアクセス方法を定義しています。
AbstractRequestCommandの実行時に生成されインスタンス変数として使用することができます。
なお、セッション情報はwisdom_config.xmlの要素「runtimeServletConfig」の属性「enablesSession」がtrueの場合に使用可能になります。
IResponseDownLoader
ダウンロード、あるいは出力ストリームに直接書き込んだ画面を表示する場合に使用するインターフェース。
このインタフェースを使用した場合、IRequestCommandの実行後に結果をJSPに送信しなくなります。
IRequestCommand#getDownLoader()を使用して取得します。
このインターフェースは出力ストリームの取得、ストリームに書き込んだデータのコンテント・タイプ、ファイル名を設定することができます。
AppMessageGenerator
アプリケーションで使用するメッセージを取得するクラス。
このクラスは.propertiesファイルからメッセージを取得します。
使用される.propertiesファイルはwisdom_config.xmlの要素「parameter」の属性「id」が「app.message.resource」の属性「value」の値が使用されます。
<parameter category='message' id='app.message.resource' value='messageResources.AppMessageResource' />
上の例であれば、messageResources.AppMessageResource_ja_JP.propertiesが参照されます。
IStringValidator
入力文字列の妥当性を検査するための共通インターフェース。
このインターフェースでは、文字列を検査する際のメソッドの規定、およびエラーコード、メッセージコードの定義をします。実装クラスはRuntimeContext#getStringValidator()を使用して取得します。
IUserSession
セッション情報へのアクセス方法を定義したインターフェース。
セッション情報へのアクセスはjavax.servlet.http.HttpSessionではなく、このインターフェースを使用して行います。
このインターフェースの実装クラスは実行時にwisdomにより作成され、wisdom_config.xmlの要素「runtimeServletConfig」の属性「enablesSession」がtrueの場合に使用可能になります。
IAuthenticate
ユーザー認証の方法を定義したインターフェース。
任意のユーザー認証ロジックを作成するために使用されます。このインターフェースを実装したクラス名をwisdom_config.xmlの要素「authenticate」の属性「authClass」に設定することでwisdomの実行時に認証ロジックとして使用されます。
RuntimeContext
アプリケーションの実行中に作成されたオブジェクト、wisdomx.core.applicationパッケージ内の実装クラスを取得するためのクラス。
おもに転送後のJSP内でwisdomで作成されたオブジェクトに対してアクセスするための静的メソッドを集めたクラスです。
AbstractRequestCommand
IRequestCommandの抽象実装クラス。
このクラスを継承してコマンドクラスを作成します。抽象メソッド_execute()を実装し、IRequestCommandインターフェースを実装したクラスを作成します。
IBatchCommand
バッチ形式で実行できるコマンドのインターフェース。
このインターフェースを実装する必要がありますが、AbstractBatchCommandを継承することにより、開発するときに意識する必要はありません。
IBatchHandler
IBatchCommandで使用できるアプリケーション情報の取得を定義したインターフェース。
IBatchCommand実行中の、データ・ソースへの接続、トランザクション管理、属性情報へのアクセス方法を定義しています。このインターフェースの実装クラスは実行時にwisdomにより作成され、AbstractBatchCommandのインスタンス変数として使用することができます。
AbstractBatchCommand
IBatchCommandの抽象実装クラス。
バッチタイプのアプリケーションはこのクラスを継承して作成します。抽象メソッド_execute()を実装し、IBatchCommandインターフェースを実装したクラスを作成します。
IRequestHandlerを覚えましょう
wisdom.core.application.*パッケージに含まれるクラスはコマンドパターンの基礎となる部分で、IRequestHandlerを軸として動作します。
wisdomを使用してアプリケーションを作成する場合のビジネス・ロジックを記述するためのテンプレート・クラスです。
AbstractFormObjectのサブクラスでは画面で表示するフィールドを定義し、
AbstractFormObjectGeneratorのサブクラスではAbstractFormObjectのサブクラスを作成するためのフィールドのデータを取得するロジック、SQL
SELECT 処理が記述されます。
AbstractFormObjectPersistanceのサブクラスではAbstractFormObjectのサブクラスのフィールドのデータを保存するためのロジック、SQL
INSERT/UPDATE/DELETE 処理が記述されます。
またAbstractFormObjectPersistanceのサブクラスでは入力チェックのロジックも記述されます。
AbstractPageListGeneratorのサブクラスは一覧形式の画面を作成するためのSQL
SELECT処理が記述されます。
AbstractFormObject
登録、更新、削除の画面表示に使用するクラス。
このクラスは画面表示に使用するオブジェクトを保持するために使用します。このクラスを継承し、画面に表示するオブジェクトをクラスの
フィールドとして定義し、setter/getterを追加します。
このオブジェクトの生成はAbstractFormObjectGeneratorのサブクラスで行い、AbstractFormObjectPersistanceのサブクラスにより登録、更新、削除を行います。
AbstractFormObjectGenerator
AbstractFormObjectのインスタンスを作成するクラス。
AbstractFormObjectのサブクラスで定義されたフィールドのためのデータを取得し、AbstractFormObjectのインスタンスを作成します。
AbstractFormObjectPersistance
AbstractFormObjectの更新処理を行うクラス。
AbstractFormObjectのサブクラスで定義されたフィールドからデータを取得し、データを更新します。
AbstractPageListGenerator
条件入力画面から一覧形式の画面を作成する共通クラス。
一覧形式表示用オブジェクトwisdomx.ui.object.IPageListを作成するためのロジックを記述します。
ParameterInputForm
フィールドの名前と値、メッセージを保管するクラス。
Define
フィールドを定義するクラス。
このクラスは、アプリケーションで使用する1データ項目をクラスとして定義します。このクラスを使用して入力チェックを行います
ビジネスロジックはテンプレート化しましょう。”共通語”が重要です。
一般的なWebアプリケーションは、一覧、編集(登録、更新、削除)という機能の集まりです。wisdomではビジネスロジックの実装に
wisdomx.logic.formtemplateパッケージのクラスを継承して作成します。各クラスは「何をするためのクラス」ということが緩やかに
ルール付けされているのでアプリケーションを作成する場合に作業を分割しやすくなります。
また実装方法が均一化されることで「この機能に問題があった。実装はFormObjectGeneratorのSQLを発行している部分だ」など、問題があった場合も素早く対応ができます。
画面描画に使用できるJavaオブジェクトを共通クラス化したものです。このパッケージに含まれるクラスはロジック、画面描画を含みません。このオブジェクトの具体的な表示はwisdomx.ui.renderパッケージのクラスを使用、または拡張して行います。画面表示オブジェクトと描画は分離します。
このクラス・パッケージのインタフェースは実装は不要です。
IPageList
一覧形式表のオブジェクトを作成するための共通インターフェース。
wisdom使用する一覧形式のクラスはこのインターフェースを実装しています。
FullRowsPageList
IPageListの実装クラス。
このクラスは全ページを保持します。
PerPageRowsPageList
IPageListの実装クラス。
このクラスは現在ページの行のみを保持します。
PageListRow
一覧形式表オブジェクトの一行をあらわすクラス。
IPageListで行として扱われるオブジェクトです。
IOption
画面描画に使用されるキーと値を持ったオブジェクト用のインターフェース。
Option
IOptionの実装クラス。
Select
IOptionを配列で保持するクラス。
HTMLのSelect、Radioのデータ・オブジェクトに使用されます。
Checkbox
IOptionを配列で保持するクラス。
HTMLのCheckbox、Select Multipleのデータ・オブジェクトに使用されます。
IHasMessageList
MessageListクラスを内包しているクラスの共通インターフェース。
クラスは再利用。データの持ち方にもパターンがあります。
htmlで表現されるデータにもパターン(htmlタグの種類)があります。これらのクラスはhtmlで表現するために
必要なデータ型を表現したもので、これらのクラスをAbstractFormObjectのサブクラスに持たせることによって
画面に必要な項目を作成します。
wisdomx.ui.object.*パッケージのクラスを生成するためのヘルパー・共通クラスです。
IPageListBuilder
IPageListオブジェクトを作成するためのインターフェース。
wisdomx.ui.object.FullRowsPageList、wisdomx.ui.object.PerPageRowsPageListを作成するためのインターフェースを定義しています。
StatementPageListBuilder
PreparedStatementからIPageListを作成するIPageListBuilderの実装クラス。
StatementBuilder
検索に使用する単純なPreparedStatementを作成するクラス。
このクラスはSQL WHERE 以降の条件を組み立てます。
IOptionsBuilder
Optionsオブジェクトを作成するためのインターフェース。
このインターフェースは各プロジェクトで実装します。
AbstractOptionsBuilder
IOptionsBuilderの抽象実装クラス。
データの作り方もパターン化しましょう。
wisdomx.ui.objectパッケージで定義されているクラスを作成するためのクラスです。StatementPageListBuilderは一覧を作成したいSQLを渡すだけでIPageList
を生成します。
AbstractOptionsBuilderはIOption、Option、Select、Checkboxクラスを作成する方法をパターン化するために使用されます。
wisdomx.ui.object.*パッケージのクラスを描画するためのヘルパー・共通クラスです。
Tag
wisdomx.ui.objectパッケージのクラスをHTML表示に文字列に変換するクラス。
IPageListDecorator
ページ・カウンタを表示するための文字列を生成するインターフェース。
IMessageLoader
画面上にMessageListオブジェクトを表示するための共通インターフェース。
DefaultMessageLoader
IMessageLoaderのサンプル実装クラス。
DefaultPageListDecorator
IPageListDecoratorのサンプル実装クラス。
データの表示方法もパターン化しましょう。
wisdomx.ui.objectパッケージで定義されているクラスをhtmlに表示するためのクラスです。
下の図がwisdomでのアプリケーション実装のパターンです。抽象クラスに役割を与え実装をパターン化します。
開発プロセスそのものをパターン化しましょう。
wisdomでは機能単位に上のようなパターンで開発を行います。機能単位はプロジェクトにより様々ですが共通用語、パターンを作成することにより
生産性が高まり、品質も向上します。
開発手順はFormObjectの作成から始まり、FormObjectGenerator、コマンドクラス、JSP、FormObjectPersistanceのような順序になります。
パターン化し、範囲を明確にすることにより定量化を量ることでき、進捗管理もより正確にできるようになります。