Repository navigation
OTR_BusinessLogicLayer
nishi_74322014 edited this page Nov 1, 2026
·
2 revisions
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_ + 引数クラスの 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)は基底クラスが持つので、定義し直さない。
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を書いていないかを見る。
- D層(データアクセス層)の実装
- トランザクション制御
- 例外処理方式
- コーディング・エージェント時代の開発基盤(B 層はスロットの代表例)
Tags: 再構築
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。