Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

ASP.NET Webフォームアプリケーションでの状態管理の使い分け

実例で学ぶASP.NET Webフォーム業務アプリケーション開発のポイント 第4回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/06/28 14:00

 本連載ではツールやフレームワークの機能を最大限利用しつつ、保守、開発効率を意識したWebフォームアプリケーションを開発する方法を学んでいきます。第4回の今回は、状態管理について学んでいきましょう。

目次

アプリケーションの状態管理とは

 デスクトップアプリケーション、Webアプリケーションなどの種類に限らず、アプリケーションを開発していくにはさまざまな「状態」を適切に管理する必要があります。

 「状態」とは何かというと、例えばログイン情報や検索前後といったフラグ、画面の表示内容などのあらゆるデータが該当します。

 これらの状態を管理する方法ですが、デスクトップアプリケーションであれば単にメモリ上に格納しておけばよいでしょう。しかし、ASP.NET Webフォームアプリケーションの場合、そうはいきません。本来Webはステートレスであり、メモリに状態を格納したとしても、次回のアクセスには利用できません。

 そこで、ASP.NET Webフォームアプリケーションにはこの特性を回避するためのさまざまな状態管理の方法が用意されています。その方法はそれぞれ保管場所、生存期間などが違い、目的に合わせてさまざまな状態管理手段を使い分ける必要があります。

状態管理方法の種類

 ASP.NET Webフォームアプリケーションで用意された状態管理方法の概念図を以下に示します。

図1:アプリケーションの状態管理の種類
図1:アプリケーションの状態管理の種類

 それぞれについて簡単に説明していきましょう。

Application(アプリケーション状態)

 Webアプリケーションが起動してから終了するまでの間、状態をサーバー側で保持します。アプリケーションが再起動すると、その値は失われます。

Cache(キャッシュ)

 Webアプリケーションが起動してから終了するまでの間、状態をサーバー側に保持することはApplicationと同じです。しかし、Cacheは有効期限を設定することができ、有効期限が設定された状態は、不要になれば自動的に破棄される点が異なります(有効期限を設定しない場合はApplicationと同じです)。

 Applicationと同じように、アプリケーションが再起動すると、その値は失われます。

Session(セッション状態)

 セッション、つまりブラウザを開いてから閉じるまでの一連のやりとりの間、状態をサーバー側に保存します。そのため、別ページに移動しても値は保持され続けますので、画面をまたいだ状態管理によく用いられます。

 ただし、別のセッションに値は引き継がれません。セッションをまたいだ状態保持にはApplicationやCache、Profileを用います。

Profile(プロファイル)

 ユーザーごとに状態をサーバー側に保存します。その状態は複数のセッションをまたいで保存されます。また、概念図では表されていませんが、アプリケーションが再起動されてもその値は保存されているため、次回アクセス時に再び使用することができます。

 ユーザーをまたいだ状態管理にはApplicationやCacheを使います。

ViewState

 View(表示)のState(状態)という名のとおり、単一画面に閉じた状態を保持します。

 ApplicationやSessionなどの他の仕組みとは異なり、状態をinputタグの"__VIEWSTATE"という名前のhiddenフィールドに埋め込み、クライアント側に保存します。その値をPostBackでサーバーに送信することにより、状態を維持します。

図2:ViewStateの仕組み
図2:ViewStateの仕組み

 設定した値は他のページに遷移すると失われてしまいます。従って、画面をまたいだ状態は通常はSessionに保存し、ViewStateは使い捨てのフラグなど、あまり大きくないデータを保存するのに使用します。

 また、ASP.NET Webフォームアプリケーションでは、サーバーコントロールの値以外の状態、例えばラベルコントロールのテキストやドロップダウンリストコントロールの選択肢のリスト、コントロールの文字色、背景色などを保存するために、自動的にViewStateが使用されています。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 高野 将(タカノ ショウ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2012年2月時点での登録メンバは37名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:実例で学ぶASP.NET Webフォーム業務アプリケーション開発のポイント

もっと読む

おすすめ記事

All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5