Repository navigation
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: 再構築
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。