Skip to content

OTR_BusinessLogicLayer

nishi_74322014 edited this page Nov 1, 2026 · 2 revisions

B層(業務ロジック層)の実装

  • TOP > 使い方 > B層(業務ロジック層)の実装

概要

Open 棟梁の B 層では、業務開発者は業務コードクラスの UOC_ メソッドに業務処理だけを書く。
トランザクション、例外時の後処理、ログ出力は、フレームワークと親クラス2 が行う。

詳細

誰がどこに書くか

階層 クラス 担当 書くもの
業務コード親クラス1 BaseLogic フレームワーク 触らない
業務コード親クラス2 MyFcBaseLogic 纏め者(プロジェクトの基盤担当) 全業務共通の前後処理(UOC_ConnectionOpen / UOC_PreAction / UOC_AfterAction / UOC_AfterTransaction / UOC_ABEND)
業務コードクラス MyFcBaseLogic の派生 開発者 UOC_(メソッド名) に業務処理のみ

業務コードクラス

public class LayerB : MyFcBaseLogic
{
    private void UOC_SelectShipper(TestParameterValue testParameter)
    {
        // 戻り値クラスを生成し、先に this.ReturnValue へ設定する
        // (業務処理の途中で例外が出ても、戻り値が呼び出し側に届く)
        TestReturnValue testReturn = new TestReturnValue();
        this.ReturnValue = testReturn;

        // 業務処理:B 層の Dam を渡して Dao を生成する
        LayerD myDao = new LayerD(this.GetDam());
        myDao.SelectShipper(testParameter, testReturn);
    }
}

UOC メソッドの決まり

要素 決まり
メソッド名 UOC_ + 引数クラスの MethodName(完全一致。レイトバインドで呼ばれる)
アクセス修飾子 private でよい(直接呼ばせない)
戻り値 void。結果は this.ReturnValue で返す
引数 1 つだけ。BaseParameterValue の派生型

引数クラス・戻り値クラス

引数クラス・戻り値クラスの階層

public class TestParameterValue : MyParameterValue
{
    public ShipperViewModel Shipper { get; set; }

    public TestParameterValue(
        string screenId, string controlId, string methodName, string actionType, MyUserInfo user)
        : base(screenId, controlId, methodName, actionType, user) { }
}

public class TestReturnValue : MyReturnValue
{
    public object Obj;
}

エラー情報(ErrorFlag / ErrorMessageID / ErrorMessage / ErrorInfo)は基底クラスが持つので、定義し直さない。

呼び出す(P 層から)

TestParameterValue pv = new TestParameterValue(
    this.ContentPageFileNoEx, "btnSelect", "SelectShipper", "SQL", this.UserInfo);

LayerB layerB = new LayerB();
TestReturnValue rv = (TestReturnValue)layerB.DoBusinessLogic(pv, DbEnum.IsolationLevelEnum.ReadCommitted);

if (rv.ErrorFlag)
{
    // 業務例外:rv.ErrorMessageID / rv.ErrorMessage を表示して続行
}
メソッド 用途
DoBusinessLogic(pv) / DoBusinessLogic(pv, iso) 同期
DoBusinessLogicAsync(pv) / DoBusinessLogicAsync(pv, iso) 非同期(2 層 C/S の BaseLogic2CS には無い)
  • UOC_ メソッドを直接呼ばない。 DoBusinessLogic を経由しないと、this.ReturnValue の設定時に FrameworkException になる。
  • 分離レベルとトランザクションはトランザクション制御を参照。

処理フロー

DoBusinessLogic が次の順で呼ぶ。業務コードクラスで書く必要はない。

UOC_ConnectionOpen      … Dam 生成・接続・トランザクション開始(親クラス2)
try
  UOC_PreAction         … 前処理(親クラス2)
  UOC_(メソッド名)      … 業務処理(業務コードクラス)
  UOC_AfterAction       … 後処理(親クラス2)
  Commit
  UOC_AfterTransaction  … コミット後の後処理(親クラス2)
catch
  Rollback → UOC_ABEND  … 例外処理(親クラス2)
finally
  コネクション切断
  • ロールバックしたいときは、例外をスローする(例外処理方式)。正常終了すればコミットされる。
  • 2 層 C/S(Windows Forms、MyFcBaseLogic2CS)では、業務コードクラスの書き方は同じだが、
    コミットは手動(CommitAndClose)で、業務例外でロールバックしない。

コーディング・エージェントに任せる場合

  • スキル opentouryo-layer-b、呼び出し側は opentouryo-p-call-business を使わせる。
  • レビューでは、this.ReturnValue を先に設定しているか、業務コードクラスにコミット・ロールバック・try ~ catch を書いていないかを見る。

参考


Tags: 再構築

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki
開発基盤部会 Wiki

移行管理: DONE / TODO

Clone this wiki locally