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

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

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

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

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

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

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

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

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

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



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


'商品コード項目部品
Friend Class 商品コード

  Private 商品コード選択リスト As DialogBase12

  '商品マスタテーブルをオープンする。
  Friend Function 開設現地後(ByVal fB As FormBase) As Boolean
    CType(fB.myFormHook, 受注業務).商品レコード = New 商品Table(fB.myPath + "SYOHN.txt")
    '
    Dim 復帰コード As Integer = CType(fB.myFormHook, 受注業務).商品レコード.Connect()
    Return ItemBase.BEGINPRGALCL_Allow '----------
  End Function '開設現地後

  '商品コードの入力候補一覧を表示する。
  Friend Function 選択リスト(ByVal fB As FormBase, ByVal iB_商品コード As ItemBase) As String
    Dim 商品コード選択リスト As Jutyu.AppliFrame.SListBases.SListBase12 = New Dlg商品コード(fB, iB_商品コード)
    '
    Dim wk_DialogResult As DialogResult = 商品コード選択リスト.ShowDialog(fB.myForm)
    If Not (fB.sListCom Is Nothing) Then
      Return CType(fB.sListCom, String) '----------
    Else
      Return Nothing '----------
    End If
  End Function '選択リスト

  '商品コードが入力された場合に、そのチェックを行う。
  Friend Function 入力チェック(ByVal fB As FormBase, ByVal 商品コード As String, ByVal 前_商品コード As String, ByVal De_Index As Integer) As Integer
    If 商品コード = String.Empty Then '商品コードの空入力。
      Return 300 '---------- 'エラーコード 300。
    Else
      Dim 復帰コード As Integer = CType(fB.myFormHook, 受注業務).商品レコード.SelectEqual(商品コード)
      If 復帰コード = 0 Then '商品コードが見つかった。
        If Not fB.RecalcMode AndAlso 前_商品コード <> 商品コード Then
          '手入力フラグをクリアする。
          fB.setValue(ii_手入力, De_Index, String.Empty)
        End If
        Return ItemBase.CHECK_OK '---------- '正常終了。
      Else '商品コードが見つからない。
        Return 300 '---------- 'エラーコード 300。
      End If
    End If
  End Function '入力チェック

  '商品マスタテーブルをクローズする。
  Friend Function 閉鎖現地前(ByVal fB As FormBase) As Boolean
    CType(fB.myFormHook, 受注業務).商品レコード.Disconnect()
    Return ItemBase.CLOSEBLCL_Allow '----------
  End Function '閉鎖現地前

End Class '商品コード


例2) 商品名称項目部品


'商品名称項目部品
Friend Class 商品名称

  '商品名称を表示する。
  Friend Function 派生値(ByVal fB As FormBase, ByVal 商品コード As String) As String
    If 商品コード = String.Empty Then
      Return String.Empty '----------
    Else
      Return CType(fB.myFormHook, 受注業務).商品レコード.商品名称 '----------
    End If
  End Function '派生値

End Class '商品名称


例3) 受注日付項目部品


'受注日付項目部品
Friend Class 受注日付

  Private ReadOnly クリア表示 As String = "  - - " '先頭は全角の空白

  '受注日付の初期値を設定する。
  Friend Function 初期値双方(ByVal fB As FormBase, ByVal 受注日付 As String, ByVal 詳_受注日付 As ItemBase) As String
    If CType(fB.myFormHook, 受注業務).追加モードに移行直後 OrElse 受注日付 = String.Empty OrElse 受注日付.Trim() = クリア表示.Trim() Then
      Return FormBase.FormatDate(VB.DateAndTime.Today, 詳_受注日付.FormatChr) '---------- '本日の日付。
    Else
      Return FormBase.FormatDate(DateTime.Parse(受注日付), 詳_受注日付.FormatChr) '---------- '前の伝票の日付。
    End If
  End Function '初期値双方

  '受注日付が入力された場合に、そのチェックを行う。
  Friend Function 入力チェック双方(ByVal fB As FormBase, ByVal 受注日付 As String) As Integer
    If 受注日付 = クリア表示 Then
      Return ItemBase.CHECK_OK '---------- '正常終了。
    ElseIf fB.IsDateString(受注日付) Then
      If CDate(受注日付) < CType(fB.myFormHook, 受注業務).有効日付 Then
        Return 101 '---------- 'エラーコード 101。
      Else
        Return ItemBase.CHECK_OK '---------- '正常終了。
      End If
    Else
      Return 100 '---------- 'エラーコード 100。
    End If
  End Function '入力チェック双方

End Class '受注日付


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

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

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





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


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



アプリテック株式会社