ASP.NET Webフォームアプリケーションでの状態管理の使い分け
実例で学ぶASP.NET Webフォーム業務アプリケーション開発のポイント 第4回
ダウンロード サンプルファイル (5.9 MB)
本連載ではツールやフレームワークの機能を最大限利用しつつ、保守、開発効率を意識したWebフォームアプリケーションを開発する方法を学んでいきます。第4回の今回は、状態管理について学んでいきましょう。
アプリケーションの状態管理とは
デスクトップアプリケーション、Webアプリケーションなどの種類に限らず、アプリケーションを開発していくにはさまざまな「状態」を適切に管理する必要があります。
「状態」とは何かというと、例えばログイン情報や検索前後といったフラグ、画面の表示内容などのあらゆるデータが該当します。
これらの状態を管理する方法ですが、デスクトップアプリケーションであれば単にメモリ上に格納しておけばよいでしょう。しかし、ASP.NET Webフォームアプリケーションの場合、そうはいきません。本来Webはステートレスであり、メモリに状態を格納したとしても、次回のアクセスには利用できません。
そこで、ASP.NET Webフォームアプリケーションにはこの特性を回避するためのさまざまな状態管理の方法が用意されています。その方法はそれぞれ保管場所、生存期間などが違い、目的に合わせてさまざまな状態管理手段を使い分ける必要があります。
状態管理方法の種類
ASP.NET Webフォームアプリケーションで用意された状態管理方法の概念図を以下に示します。
それぞれについて簡単に説明していきましょう。
Application(アプリケーション状態)
Webアプリケーションが起動してから終了するまでの間、状態をサーバー側で保持します。アプリケーションが再起動すると、その値は失われます。
Cache(キャッシュ)
Webアプリケーションが起動してから終了するまでの間、状態をサーバー側に保持することはApplicationと同じです。しかし、Cacheは有効期限を設定することができ、有効期限が設定された状態は、不要になれば自動的に破棄される点が異なります(有効期限を設定しない場合はApplicationと同じです)。
Applicationと同じように、アプリケーションが再起動すると、その値は失われます。
Session(セッション状態)
セッション、つまりブラウザを開いてから閉じるまでの一連のやりとりの間、状態をサーバー側に保存します。そのため、別ページに移動しても値は保持され続けますので、画面をまたいだ状態管理によく用いられます。
ただし、別のセッションに値は引き継がれません。セッションをまたいだ状態保持にはApplicationやCache、Profileを用います。
Profile(プロファイル)
ユーザーごとに状態をサーバー側に保存します。その状態は複数のセッションをまたいで保存されます。また、概念図では表されていませんが、アプリケーションが再起動されてもその値は保存されているため、次回アクセス時に再び使用することができます。
ユーザーをまたいだ状態管理にはApplicationやCacheを使います。
ViewState
View(表示)のState(状態)という名のとおり、単一画面に閉じた状態を保持します。
ApplicationやSessionなどの他の仕組みとは異なり、状態をinputタグの"__VIEWSTATE"という名前のhiddenフィールドに埋め込み、クライアント側に保存します。その値をPostBackでサーバーに送信することにより、状態を維持します。
設定した値は他のページに遷移すると失われてしまいます。従って、画面をまたいだ状態は通常はSessionに保存し、ViewStateは使い捨てのフラグなど、あまり大きくないデータを保存するのに使用します。
また、ASP.NET Webフォームアプリケーションでは、サーバーコントロールの値以外の状態、例えばラベルコントロールのテキストやドロップダウンリストコントロールの選択肢のリスト、コントロールの文字色、背景色などを保存するために、自動的にViewStateが使用されています。
この記事は参考になりましたか?
- 実例で学ぶASP.NET Webフォーム業務アプリケーション開発のポイント連載記事一覧
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 高野 将(タカノ ショウ)
<個人紹介>新潟県長岡市在住の在宅リモートワークプログラマー。家事や育児、仕事の合間に長岡IT開発者勉強会(NDS)、Niigata.NET、TDDBCなどのコミュニティに関わったり、Web記事や書籍などの執筆を行ったりしている。著書に『アプリを作ろう! Visual C#入門 Visual C# 2017対応』(日経BP社、2017)など。< WINGSプロジェクト について>有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での 登録メンバ は約50名で、現在も執筆メンバを 募集中 。興味のある方は、どしどし応募頂きたい。 著書 、 記事 多数。 RSS X: @WingsPro_info (公式)、 @WingsPro_info/wings (メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
