Repository navigation
OTR_StateManagement
nishi_74322014 edited this page Oct 27, 2026
·
1 revision
「どこに何を持たせるか」の地図。ASP.NET の状態管理方式と、Open 棟梁での置き場を纏める。
アプリ全体で共有する定数を持つ「共有情報取得機能」もここで扱う。
| 方式 | 用途・スコープ | 注意 |
|---|---|---|
| ViewState | Web コントロールの状態の復元(同一画面のポストバック) | Web Forms 専用。HTML が肥大する |
| Hidden / Form / Query String | リクエスト単位で値を持ち回る | 改ざんリスク(サーバで検証する) |
| Cookie | セッション ID、認証チケット | 改ざん・容量 |
Server.Transfer + HttpContext.Items
|
単一リクエスト内での持ち回り | Web Forms 専用 |
| Session | ユーザ単位の状態(複数ページ) | 資源消費。負荷分散では StateServer / SQL Server(直列化が必要) |
| Application / 静的変数 | アプリ全体での共有 | 排他制御が必要。負荷分散では共有できない |
| Cache | キャッシュ、マスタの保持 | 自動で破棄されるので、取得時に null チェックする |
- net48:
web.configの<machineKey>を全ノードで統一する(ViewState・Session・認証チケットの暗号化と検証のため)。 - net10.0:
machineKeyは無い。ASP.NET Core の Data Protection(AddDataProtection)の鍵をノード間で共有する。
| 持たせたいもの | 置き場 |
|---|---|
| ユーザ単位の状態 | ブラウザ・ウィンドウ別/親画面別の Session 領域(Web Forms) |
| 共通情報(ユーザ名、端末、権限) | ユーザ情報クラス MyUserInfo。ログオン時に設定し、ASP.NET は Session、リッチクライアントはグローバル変数に持つ |
| レイヤ間の受け渡し | 引数クラス・戻り値クラス(MyParameterValue / MyReturnValue の派生)。P → B → D へ引数で渡す |
| アプリ共通の定数 | 共有情報(SPDefinition.xml、下記) |
| レスポンスのキャッシュ無効化 | FxCacheControl |
| 複数のポストバックに跨る編集 | Session に DataTable を保持(DataTable によるバッチ更新) |
アプリ全体で共有する値を、構成ファイルとは別の定義ファイルに持つ。appSettings との使い分けはプロジェクトで決める。
<SPD>
<SharedProp key="HostName1" value="xxx.example.com"/>
</SPD>using Touryo.Infrastructure.Framework.Util;
string v = GetSharedProperty.GetSharedPropertyValue("HostName1");- 定義ファイルのパスは設定
FxXMLSPDefinitionで指定する。 -
keyは XML の ID 型なので、先頭に数字を使えない。冒頭に DTD を埋め込む。
- スキル
opentouryo-app-design(references/state-management.md)とopentouryo-shared-propertyを使わせる。 - エージェントは Session や静的変数に安易に状態を持たせがちなので、負荷分散を前提にレビューする。
Tags: 再構築
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。