ビジネスロジック部品の例

 業務プログラム開発作業の一つとして、ビジネスロジック部品を用意する (新たにプログラミングする、または以前に蓄積した部品群の中からを選び出す) のは、アプリ開発者の方々の役割となっています。

 ここには、C# で記述した三つのビジネスロジック部品の例が書いてあります。

  例1) 商品コード項目部品
  例2) 商品名称項目部品
  例3) 受注日付項目部品

 ビジネスロジック部品は、ここの例のようにデータ項目対応のクラスという形にして、その項目に関するすべてのロジックをそのフックメソッドの中に記述するのが特徴的です。

 業務プログラムの仕様は、業務用語で示されますが、業務用語とデータ項目とはほぼ1対1対応するものであり、ビジネスロジックがデータ項目対応に整理されていると、仕様変更時にどの部品を修正すればよいのか一目瞭然となります。
 この他にも、項目対応ビジネスロジック部品は数々の望ましい性質をもつことになり、こういういう形にすることで再利用性が向上して、再利用開発を推進することになります。

 より鮮明なイメージもっていただくためにある業務プログラムの例をご紹介すると、それはこうした項目対応ビジネスロジック部品 2000 個ほどで構成されています。そして、このケースでは項目対応ビジネスロジック部品の平均行数は 55 ほどでしたので、かなり小粒の部品だといえます。なお、部品数は多くてもデータ項目対応なのですぐに探し出せます。

 さらに詳しく述べると、ここの例のように、項目対応ビジネスロジック部品とは、商品コードとか商品名称項とか受注単価とかというデータ項目に対応するビジネスロジック (フレームワークとの差分だけをメソッドとして記述したものなので一般にフックメソッドと呼ばれるもの) を塊にしたクラス (フックメソッドで構成されるクラスなので一般にフッククラス呼ばれる) を意味します。

 この項目対応ビジネスロジック部品は、従来の MANDALA の部品から移行可能であり、従来と同様に再利用性が高いので、すでに蓄積された部品があれば、新たにプログラミングをする必要がありません。
 たとえば、商品コードというデータ項目は、受注計上画面にも、在庫照会画面にも含まれるものとすると、商品コードという項目対応ビジネスロジック部品は、そのどちらの画面でも同じものを再利用できます。ですから、すでに開発済みの部品があればそれを再利用できる場合が多いのです。

 さらに、部品の再利用による現実的かつ実質的な効能をご紹介すると、ビジネスロジックを項目対応ビジネスロジック部品から構成されるようにした ERP パッケージが実際に幾つかの会社から販売されています。これらはカスタマイズ作業が簡単にできるという特長をもっているので、通常は最終顧客企業のご要望に従いカスタマイズして販売されております。しかも、パッケージの開発元とは異なるカスタマイズ業者を募って、そうした会社がカスタマイズ作業を実施することができております。一般には、カスタマイズ作業に高いコストがかかるものですし、パッケージの開発元以外のところではカスタマイズ作業を実施できないというのが常識ですが、ビジネスロジック部品技術はこの常識を覆す実績をもっています。



例1) 商品コード項目部品


// 商品コード項目部品
namespace ItemHook {
  internal class 商品コード {

    // 商品マスタテーブルをオープンする。
    internal bool 開設現地後( FormBase fB ) {
      ((受注業務) fB.myFormHook).商品レコード = new Tables.商品Table(fB.myPath + "SYOHN.txt");
      //
      int 復帰コード = ((受注業務) fB.myFormHook).商品レコード.Connect();
      return ItemBase.BEGINPRGALCL_Allow; // ----------
    }

    // 商品コードの入力候補一覧を表示する。
    internal string 選択リスト( FormBase fB, ItemBase iB_商品コード ) {
      SListBase12 商品コード選択リスト = new Dlg商品コード(fB, iB_商品コード);
      //
      DialogResult wk_DialogResult = 商品コード選択リスト.ShowDialog(fB.myForm);
      if( ! (fB.sListCom == null) ) {
        return (string) fB.sListCom; // ----------
      }
      else {
        return null; // ----------
      }
    }

    // 商品コードが入力された場合に、そのチェックを行う。
    internal int 入力チェック( FormBase fB, string 商品コード, string 前_商品コード, int De_Index ) {
      if( 商品コード == string.Empty ) { // 商品コードの空入力。
        return 300; // ---------- 'エラーコード 300。
      }
      else {
        int 復帰コード = ((受注業務) fB.myFormHook).商品レコード.SelectEqual(商品コード);
        if( 復帰コード == 0 ) { // 商品コードが見つかった。
          if( ! fB.RecalcMode && 前_商品コード != 商品コード ) {
            // 手入力フラグをクリアする
            fB.setValue(受注業務FormBase.ii_手入力, De_Index, string.Empty);
          }
          return ItemBase.CHECK_OK; // ---------- '正常終了。
        }
        else { // 商品コードが見つからない。
          return 300; // ---------- 'エラーコード 300。
        }
      }
    }

    // 商品マスタテーブルをクローズする。
    internal bool 閉鎖現地前( FormBase fB ) {
      ((受注業務) fB.myFormHook).商品レコード.Disconnect();
      return ItemBase.CLOSEBLCL_Allow; // ----------
    }

  } // class 商品コード
} // namespace ItemHook


例2) 商品名称項目部品


// 商品名称項目部品
namespace ItemHook {
  internal class 商品名称 {

    // 商品名称を表示する。
    internal string 派生値( FormBase fB, string 商品コード ) {
      if( 商品コード == string.Empty ) {
        return string.Empty; // ----------
      }
      else {
        return ((Jutyu.受注業務) fB.myFormHook).商品レコード.商品名称; // ----------
      }
    }

  } // class 商品名称
} // namespace ItemHook


例3) 受注日付項目部品


// 受注日付項目部品
namespace ItemHook {
  internal class 受注日付 {

    private readonly string クリア表示 = "  - - "; // 先頭は全角の空白

    // 受注日付の初期値を設定する。
    internal string 初期値双方( FormBase fB, string 受注日付, ItemBase 詳_受注日付 ) {
      if( ((Jutyu.受注業務) fB.myFormHook).追加モードに移行直後
        || 受注日付 == string.Empty || 受注日付.Trim() == クリア表示.Trim() ) {
        // 本日の日付。
        return FormBase.FormatDate(DateTime.Now, 詳_受注日付.FormatChr);
      }
      else {
        //前の伝票の日付。
        return FormBase.FormatDate(DateTime.Parse(受注日付), 詳_受注日付.FormatChr);
      }
    }

    // 受注日付が入力された場合に、そのチェックを行う。
    internal int 入力チェック双方( FormBase fB, string 受注日付 ) {
      if( 受注日付 == クリア表示 ) {
        return ItemBase.CHECK_OK; // ---------- 正常終了。
      }
      else if( fB.IsDateString(受注日付) ) {
        if( DateTime.Parse(受注日付).CompareTo(((Jutyu.受注業務) fB.myFormHook).有効日付) < 0 ) {
          return 101; // ---------- エラーコード 101。
        }
        else {
          return ItemBase.CHECK_OK; // ---------- 正常終了。
        }
      }
      else {
        return 100; // ---------- エラーコード 100。
      }
    }

  } // class 受注日付
} // namespace ItemHook


ビジネスロジック部品と画面レイアウトなどの合成

 ビジネスロジック部品は、画面レイアウトおよび MANDALA.net 実動フレームワークと合成されて業務プログラムになります。

 以下に画面レイアウトの例を示します。画面レイアウトは、Visual Studio .NET (マイクロソフト社製の統合開発環境) のデザイナで比較的簡単に (WYSIWYG に) デザインできます。ここには、ロジックを含めません。





 ビジネスロジック部品、画面レイアウトおよび MANDALA.net 実動フレームワークの三つを合成するのは、MANDALA.net 2005 のコード合成ツールの役割となっています。
 ですから、アプリ開発者の方々は、ビジネスロジック部品と画面レイアウトを MANDALA.net 2005 のコード合成ツールに与えて、合成せよと指示をするだけで済みます。


Copyright (C) 1996-2005 By AppliTech, Inc. All Rights Reserved.
AppliTechMANDALA および workFrame=Browser は、アプリテック株式会社の登録商標です。
ここに掲載の社名、製品名には、各社の商標または登録商標があります。



アプリテック株式会社