Sample : Server処理の構造化

Server処理を実装するための実行リストはClientとは形が違い、 Framework自体に「トランザクション/ディシジョンテーブル/ディシジョンタイプ/実行リスト」といった構造を持っています。 基本的にはディシジョンテーブル内のディシジョンタイプ[SetCase]でディシジョンタイプ[Execute]のいずれかを実行する、 といった方法で処理の分岐を実装することになります。
しかし処理の分岐が無かったとしても、複雑なロジックをや大量の処理を実装するには Clientにある「処理のBlock化」と同様のことは必要だと考えます。

そういった用途に使用できるServer構造化用の標準ロジッククラスの使い方を説明します。

1.通常の実装方法
2.構造ロジッククラスを使った実装方法

通常の実装方法↑top

実装サンプル :構造化実装Sample01

例1例えば、以下のような仕様があったとします。

部門漢字名称で部門マスタをFilter取得する
分類 処理
主処理 【部門漢字名称】の値が設定されていない場合はエラーメッセージ「漢字名称が未入力です。」を設定し、ClientへERRORを返す。
【部門漢字名称】の前後に”%”を付加。
SqlMapper「部門マスタ_抽出_漢字名称」を実行する。
抽出された件数を【件数】に設定する。

フィルタ条件として使用する【部門漢字名称】に値が入っているかどうかをチェックし、 値が入っていない場合はClient側にERRORを返し、値が入っている場合は部分一致検索を行い、 Clientに抽出結果と抽出された件数を返す機能です。

これを単純に実装すると次のようになります。
●図1. 構造化実装Sample02
images/01.jpg

構造ロジッククラスを使った実装方法↑top

実装サンプル :構造化実装Sample02

例2先の仕様は次のように分類する事ができます。

部門漢字名称で部門マスタをFilter取得する
分類 処理
前処理 【部門漢字名称】の値が設定されていない場合はエラーメッセージ「漢字名称が未入力です。」を設定し、ClientへERRORを返す。
【部門漢字名称】の前後に”%”を付加。
主処理 SqlMapper「部門マスタ_抽出_漢字名称」を実行する。
後処理 抽出された件数を【件数】に設定する。

Serverへ送信されたデータのチェックやSQLマッパー実行前の処理を「前処理」、 実際にSQLマッパーを実行する処理を「主処理」、SQLマッパー実行後の処理を「後処理」として分類してみました。

Client側には、処理ブロックとそれを実行するExecuteAfterロジッククラスで 「関連する一連の処理をまとめる」「まとめた一連の処理を実行する」実装を行いました。 Server側の実装ではこれを「ディシジョンテーブル」と、それを実行する「ExecuteDecisionTableロジッククラス」でClientと同じような事を実装します。

「ディシジョンテーブル」やその配下で構造を実装できる「ディシジョンタイプ」については リファレンスにて記述があるのでここでは説明しませんが、 「ディシジョンテーブル」をサブルーチンのように実行する事ができる構造化ロジッククラスを紹介します。

  • ディシジョンテーブル実行(ExecuteDecisionTable)
    In、もしくはパラメータにディシジョンテーブル名を指定。指定されたディシジョンテーブルを実行する。

Server Application Management Console内の特定のディシジョンテーブルを実行することができるロジッククラスです。 使い方としては「パラメータに実行したいディシジョンテーブルの物理名称を指定する」 という使い方が一般的だと思いますので、その方法で実装する例を紹介します。

まず最初に、本体となるトランザクションとは別に「処理ブロック」として利用するディシジョンテーブルを まとめて登録しておくトランザクションを作成します。 このトランザクションはClientとのI/Fとなるものではなく、Server Application Management Console内で使用する内部的なものですから In/Outの設定は必要ありません。
名称は「構造」等の「外向け(Client向け)」のものではないとわかる名称が良いです。
●図2. 構造ロジッククラスから呼び出されるディシジョンテーブル用のトランザクションの定義
images/02.jpg

次に、実際に「ディシジョンテーブル実行(ExecuteDecisionTable)」を定義します。 今回の例ですと「前処理」「主処理」「後処理」という単位で処理をまとめていますので、 それにあわせて「Before」「Main」「After」というディシジョンテーブルを呼び出す定義を行っています。
●図3. ExecuteDecisionTableロジッククラスの定義
images/07.jpg

メインとなるトランザクションつまり構造用でないClientとのI/Fとなる方のトランザクションには 作成した「ディシジョンテーブルを実行するロジッククラス」だけを並べ、それぞれのディシジョンテーブルを順に実行するだけの設定を行います。
●図4. メインのトランザクションの実行リスト
images/03.jpg

メインとなるトランザクションはこれで完成です。 ツリーで見ると随分単純になっています(まだ実際の処理を配置していないので当然ですが)。
●図5. メインのトランザクションの構造
images/08.jpg

実際の処理を配置していくもう片方の構造用のトランザクションの方には 「前処理」「主処理」「後処理」用のディシジョンテーブルを作成します。
●図6. 「構造」トランザクションのディシジョンテーブル
images/04.jpg

そして、各ディシジョンテーブルにはそれぞれに対応する分類内の処理を配置していきます。 例えば「前処理」ですと「チェック(+エラー処理)」「%付加」等の処理が必要です。
●図7. 前処理の実装
images/05.jpg

このような手順で「主処理」「後処理」の中身を実装していくと、 最終的にはツリー上では次の図の様な構造になります。
●図8. 完成した構造
images/09.jpg
「部門マスタ_抽出_漢字名称」トランザクションの実行リストから 「前処理」「主処理」「後処理」のディシジョンテーブルを呼び出している形で、 それぞれ呼び出された側の「構造」トランザクションに設定されているディシジョンテーブルの内部で それぞれの分類に対応された処理が実装されている事が確認できます。

Valid XHTML 1.1