Domain Model Component(DMC)
ドメイン(アプリケーション化する対象)をオブジェクト化し、その振舞いを実装することで
業務における責務とプロトコルをドメインに一元管理し、業務知識を集約します。
実装
アプリケーションの実装
≪Interface≫jp.co.cam.usax.bmc.domain.DMCIFを実現したクラスを実装します。
標準処理(find/fill/create/update/delete)を実装した下記の抽象クラスをご利用ください。
- 標準クラス
-
jp.co.cam.usax.bmc.domain.impl.AbstractDomainModelComponent
(実装例)
package jp.co.hogehoge.bmc.dmc;
/**
* 銀行口座。
*/
public class BankAccountDMC
extends AbstractDomainModelComponent
{
/** キー:口座番号 */
public static String PKEY_ACCOUNT_NO = "ACCOUNT_NO";
/**
* 有効な口座番号か確認する。
* 【パラメータ】(*)必須
* ACCOUNT_NO(*)
*/
public boolean isActiveAccount()
throws RuleException
{
return super.getRuleEngine("isActiveAccount").check();
}
...省略(ドメインの振舞いを実装)
}
Rule定義
ドメイン内で使用する入力や状態の確認、処理を定義します。
アプリケーションの実装時にAbstractDomainModelComponentを使用した場合は、
標準処理(fill/find/create/update/delete)に対応する定義を行ってください。
なお、標準処理を使用しない場合は、アプリケーション側の実装にて
対象のメソッドをオーバーライドして使用不可としてください。
実装例
<?xml version="1.0" encoding="utf-8"?>
<rules
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../cam/usax/resource/Rule.xsd"
controller="jp.co.cam.usax.rule.bean.resource.impl.RuleResource">
<!-- ============================================================ -->
<!-- 標準の処理 -->
<!-- ============================================================ -->
<rule id="Find" description="標準:一覧検索">
<run>
<select id="RESULT" entity="ACCOUNT">
<where>
<data key="ACCOUNT_NO" map="ACCOUNT_NO" type="eq" />
<data key="USER_NAME" map="USER_NAME" type="eq" />
<data key="PHONE_NO" map="PHONE_NO" type="eq" />
<data val="0" map="FLAG" type="eq"
datatype="java.lang.Integer" dataformat="#" />
</where>
</select>
</run>
<mapping>
<!-- 結果セットの参照は呼出し元に任せるためnativeで返却 -->
<data map="RESULT" key="ACCOUNT_LIST" persistent="native" />
</mapping>
</rule>
<rule id="Fill" description="標準:単一検索">
<run>
<select id="RESULT" entity="ACCOUNT">
<where>
<data key="ACCOUNT_NO" map="ACCOUNT_NO" type="eq" def="NULL" />
<data val="0" map="FLAG" type="eq"
datatype="java.lang.Integer" dataformat="#" />
</where>
</select>
</run>
<mapping>
<data map="RESULT" key="*" />
</mapping>
</rule>
<rule id="Create" description="標準:登録">
...省略(処理を実装する)
</rule>
<rule id="Update" description="標準:更新">
...省略(処理を実装する)
</rule>
<rule id="Delete" description="標準:削除">
...省略(処理を実装する)
</rule>
<!-- ============================================================ -->
<!-- 固有の処理 -->
<!-- ============================================================ -->
<rule id="isActiveAccount" description="有効な口座番号か確認する">
<check>
<select id="isActive" entity="ACCOUNT" exists="true"
message="指定された口座番号は使用できません">
<where>
<data key="ACCOUNT_NO" map="ACCOUNT_NO" type="eq" def="NULL" />
<data val="0" map="FLAG" type="eq"
datatype="java.lang.Integer" dataformat="#" />
</where>
</select>
</check>
</rule>
...省略(その他固有の処理があれば実装する)
</rules>
Rule定義についての詳細はこちらを参照
Attribute定義
ドメイン内で使用するデータ項目の属性を定義します。
複数のドメインで使用されるデータ項目は共通Attributeを作成し、インポートしてご利用ください。
実装例
<?xml version="1.0" encoding="UTF-8"?>
<attributes
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../cam/usax/resource/Attribute.xsd"
controller="jp.co.cam.usax.rule.bean.resource.impl.AttributeResource"
import="jp.co.hogehoge.UserInfo,jp.co.hogehoge.UserCorporate">
<attribute id="ACCOUNT_NO" name="口座番号">
<conversion>
<number format="1byte" />
</conversion>
<validate>
<characters>
<character format="number(1byte)" />
</characters>
<length type="length" max="8" />
</validate>
</attribute>
...省略(必要なデータ項目を定義する)
</attributes>
Attribute定義についての詳細はこちらを参照
Event/BMCクラスからDMCを実行する
EventクラスやBMCなどBMCIFを実現したクラスは、DMCにアクセスできす。
アプリケーションの実装
(実装例)
// DMC
final DMCIF dmc = super.getDomainModelByID("DMCの管理ID");
// 実行パラメータの設定
dmc.setString("パラメータ1", "A");
dmc.setString("パラメータ2", "B");
// レコードの登録
dmc.create();
Attributeの定義
使用するDMCクラスは呼出し元のクラスが使用するAttributeに定義します。
(実装例)
<attribute id="DMCの管理ID"
name="jp.co.hogehoge.bmc.dmc.OriginDMC" />