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" />
  

©Camel engineering LLP