Skip to content

OTR_TableDrivenControl

nishi_74322014 edited this page Oct 27, 2026 · 1 revision

テーブル駆動制御(権限・状態・閉塞・多言語化)

概要

親クラス2 の全画面共通の初期化(UOC_CMNFormInit)で、画面上のコントロールを再帰的に走査し、
「画面名+コントロール名」をキーにテーブルから設定を引いて一括で適用する方式。

  • 多言語化(辞書テーブル)、権限・状態制御、閉塞チェックに応用できる。
  • 実装するのは**纏め者(親クラス2)**で、全画面に自動で効く(親クラス2 のカスタマイズ)。

詳細

共通の仕組み

// 親クラス2 の UOC_CMNFormInit(イメージ)
void Apply(Control ctrl)
{
    // ctrl.ID と画面名でテーブルを引き、Text / Enabled / Visible / ReadOnly などを設定する
    if (ctrl.HasControls())
    {
        foreach (Control child in ctrl.Controls) { Apply(child); }
    }
}
  • コントロール・ツリーがある Web Forms・Windows Forms でのみ使える。MVC にはコントロール・ツリーが無いので、別の戦略(Razor のローカライズ、タグ ヘルパーなど)を採る。
  • 同じ再帰走査の手法は、単項目の入力値チェックでも使う(入力値のチェック)。

応用① 多言語化(辞書テーブル)

  • 辞書テーブル:ID/画面名/コントロール名/日本語/英語/中国語/…。
  • 表示時に画面名で結果セットを取り、各コントロールの Text を差し替える。
  • 格納先は、DB、XML(DataTable.WriteXml() / ReadXml())、DataTable(DB レス)。
  • 既定は .resx だが、辞書テーブルは定義を一覧でき、運用で変更しやすい(国際化(多言語化))。

応用② 権限・状態制御

  • 権限・状態テーブル:画面名/コントロール名/ロール/状態/表示・活性。
  • ロールや業務の状態に応じて、各コントロールの Visible / Enabled などを一括で設定する。
  • ロールは認証とユーザ情報で保持する。

応用③ 閉塞・閉塞チェック

  • 閉塞テーブル:機能/画面/イベント 単位 × 閉塞状態。
種類 内容
障害閉塞 エラーをきっかけに自動で閉塞する
運用閉塞 メンテナンスやバッチのために閉塞する
  • 親クラス2 の共通処理の「閉塞チェック」で閉塞テーブルを引き、閉塞していれば閉塞用のメッセージ ID を付けた業務例外またはシステム例外をスローする(例外処理方式)。
  • 閉塞はコントロールの再帰走査ではなく「テーブル引き+例外」なので、MVC・Web API でも実装できる。
  • 既定のテンプレートの親クラス2 には、// 権限チェック・// 閉塞チェック の空の差し込み口がある。

設計時に決めること

  • 多言語化を .resx(既定)にするか、辞書テーブルにするか。辞書テーブルなら格納先。
  • 権限・状態・閉塞をテーブル駆動で制御するか。閉塞の種類(障害/運用)と単位(機能/画面/イベント)。

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

  • 設計はスキル opentouryo-app-design(references/table-driven-control.md)、実装は纏め者が opentouryo-base2-customize で行う。
  • アプリ開発のエージェントには、画面ごとに個別の権限チェックを書かせず、テーブル駆動の仕組みに乗せる。

参考


Tags: 再構築

NetDevInfraWiki

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

移行管理: DONE / TODO

Clone this wiki locally