「アプリケーション開発」のための汎用性が高い、かつ単純なAPIを持ったフルスタックのJavaフレーム
  • TEL: 03-6418-5221
  • TEL: 03-6418-5221

開発パターン

Wisdomでは多くのクラス・パッケージが存在しています。各パッケージの使用用途の概略をご説明します。

wisdom.core.application

コマンドクラス、トランザクション、リクエスト、セッションへのアクセス方法を定義したインターフェース、抽象クラスを含めた パッケージです。

MVCパターンはこのパッケージクラスのクラスを使用することで完結するように設計されています。

IRequestHandlerを軸として動作しますので、すべての細かな機能を覚える必要はありません。

IHandler

IRequestCommand、IBatchCommandの実行中に使用できるアプリケーション情報、資源にアクセスする方法を定義したインターフェース。各コマンドクラス実行中のパラメータ属性の設定、データ・ソースへの接続、トランザクション管理を定義しています。

IRequestHandler

IHandlerを継承し、セッション情報へのアクセス方法を定義したインターフェース。AbstractRequestCommandの実行時に生成されインスタンス変数として使用することができます。

IBatchHandler

IHandlerを継承したインターフェース。このインターフェースの実装クラスは実行時にwisdomにより作成され、AbstractBatchCommandのインスタンス変数として使用することができます。 

IRequestCommand

Webで実行するコマンドを定義したインターフェース。
AbstractRequestCommandを継承することにより実装されますので意識する必要はありません。

IBatchCommand

バッチ形式で実行できるコマンドのインターフェース。
このインターフェースを実装する必要がありますが、AbstractBatchCommandを継承することにより、開発するときに意識する必要はありません。  

AbstractRequestCommand

IRequestCommandの抽象実装クラス。
このクラスを継承してコマンドクラスを作成します。抽象メソッド_execute()を実装し、IRequestCommandインターフェースを実装したクラスを作成します。 

AbstractBatchCommand

IBatchCommandの抽象実装クラス。
バッチタイプのアプリケーションはこのクラスを継承して作成します。抽象メソッド_execute()を実装し、IBatchCommandインターフェースを実装したクラスを作成します。 

IRequestParser

javax.servlet.http.HttpServletRequestを解析するためのインターフェース。パラメータへのアクセス、添付ファイルの取得方法などを定義しています。AbstractRequestCommandの実行時に生成されインスタンス変数として使用することができます。

IResponseDownLoader

ダウンロード、あるいは出力ストリームに直接書き込んだ画面を表示する場合に使用するインターフェース。出力ストリームの取得、ストリームに書き込んだデータのコンテント・タイプ、ファイル名を設定することができます。 IRequestCommandのgetDownLoader()を使用して取得します。実行後は結果をJSPに送信しません。

RuntimeContext

アプリケーションの実行中に作成されたオブジェクト、wisdomx.core.applicationパッケージ内の実装クラスを取得するためのクラス。おもに転送後のJSP内でwisdomで作成されたオブジェクトに対してアクセスするための静的メソッドを集めたクラスです。  

IUserSession

セッション情報へのアクセス方法を定義したインターフェース。セッション情報へのアクセスはjavax.servlet.http.HttpSessionではなく、このインターフェースを使用して行います。このインターフェースの実装クラスは実行時にwisdomにより作成され、wisdom_config.xmlの要素「runtimeServletConfig」の属性「enablesSession」がtrueの場合に使用可能になります。

IAuthenticate

ユーザー認証の方法を定義したインターフェース。任意のユーザー認証ロジックを作成するために使用されます。このインターフェースを実装したクラス名をwisdom_config.xmlの要素「authenticate」の属性「authClass」に設定することでwisdomの実行時に認証ロジックとして使用されます。 

IStringValidator

入力文字列の妥当性を検査するための共通インターフェース。
このインターフェースでは、文字列を検査する際のメソッドの規定、およびエラーコード、メッセージコードの定義をします。実装クラスはRuntimeContext#getStringValidator()を使用して取得します。 

AppMessageGenerator

アプリケーションで使用するメッセージを取得するクラス。

このクラスは.propertiesファイルからメッセージを取得します。 使用される.propertiesファイルはwisdom_config.xmlの要素「parameter」の属性「id」が「app.message.resource」の属性「value」の値が使用されます。

wisdomx.logic.formtemplate

Wisdomを使用してアプリケーションを作成する場合のビジネス・ロジックを記述するためのテンプレート・クラスです。

  • AbstractFormObjectのサブクラス
    画面で表示するフィールドを定義し、setter/getterを作ります。
     
  • AbstractFormObjectGeneratorのサブクラス
    AbstractFormObjectのサブクラスを作成するためのフィールドのデータを取得するロジック、SQL SELECT 処理を記述します。
     
  • AbstractFormObjectPersistanceのサブクラス
    AbstractFormObjectのサブクラスのフィールドの入力チェックのロジック、データを保存するためのロジック、SQL INSERT/UPDATE/DELETE 処理を記述します。
     
  • AbstractPageListGeneratorのサブクラス
    一覧形式の画面を作成するためのSQL SELECT処理が記述されます。

AbstractFormObject

登録、更新、削除の画面表示に使用するクラス。
このクラスは画面表示に使用するオブジェクトを保持するために使用します。このクラスを継承し、画面に表示するオブジェクトをクラスの フィールドとして定義し、setter/getterを追加します。

AbstractFormObjectGenerator

AbstractFormObjectのインスタンスを作成するクラス。AbstractFormObjectのサブクラスで定義されたフィールドのためのデータを取得し、AbstractFormObjectのインスタンスを作成します。

AbstractFormObjectPersistance

AbstractFormObjectの更新処理を行うクラス。
AbstractFormObjectのサブクラスで定義されたフィールドからデータを取得し、データを更新します。 

Define

フィールドを定義するクラス。
このクラスは、アプリケーションで使用する1データ項目をクラスとして定義します。このクラスを使用して入力チェックを行います。

StringChecker

Defineとして定義されたデータ項目の情報を利用してデータの妥当性チェックを行います。

ParameterInputForm

フィールドの名前と値、メッセージを保管するクラス。

ビジネスロジックはテンプレート化しましょう。”共通語”が重要です。

一般的なWebアプリケーションは、一覧、編集(登録、更新、削除)という機能の集まりです。wisdomではビジネスロジックの実装に wisdomx.logic.formtemplateパッケージのクラスを継承して作成します。各クラスは「何をするためのクラス」ということが緩やかに ルール付けされているのでアプリケーションを作成する場合に作業を分割しやすくなります。
また実装方法が均一化されることで「この機能に問題があった。実装はFormObjectGeneratorのSQLを発行している部分だ」など、問題があった場合も素早く対応ができます。 

wisdomx.ui.object

画面描画に使用できるJavaオブジェクトを共通クラス化したものです。このパッケージに含まれるクラスはロジック、画面描画を含みません。このオブジェクトの具体的な表示はwisdomx.ui.renderパッケージのクラスを使用、または拡張して行います。画面表示オブジェクトと描画は分離します。
このクラス・パッケージのインタフェースは実装は不要です。

IPageList

一覧形式表のオブジェクトを作成するための共通インターフェース。現在ページの取得、ページネーションの制御が定義されています。

FullRowsPageList

IPageListの実装クラス。
このクラスは全ページを保持します。

PerPageRowsPageList

IPageListの実装クラス。
このクラスは現在ページの行のみを保持します。

PageListRow

IOption

画面描画に使用されるキーと値を持ったオブジェクト用のインターフェース。

Option

IOptionの実装クラス。 

Select

IOptionを配列で保持するクラス。
HTMLのSelect、Radioのデータ・オブジェクトに使用されます。

Checkbox

IOptionを配列で保持するクラス。
HTMLのCheckbox、Select Multipleのデータ・オブジェクトに使用されます。

IHasMessageList

MessageListクラスを内包しているクラスの共通インターフェース。

クラスは再利用。データの持ち方にもパターンがあります。

htmlで表現されるデータにもパターン(htmlタグの種類)があります。これらのクラスはhtmlで表現するために 必要なデータ型を表現したもので、これらのクラスをAbstractFormObjectのサブクラスに持たせることによって 画面に必要な項目を作成します。 

wisdomx.ui.builder

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.render

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のような順序になります。パターン化し、範囲を明確にすることにより定量化を量ることでき、進捗管理もより正確にできるようになります。