CodeZine(コードジン)

特集ページ一覧

ASP.NETのセッションをタイプセーフに取り扱うクラスの作成

セッション、クッキー、クエリ文字列などのタイプセーフな利用

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/04/03 08:00

ダウンロード ソースコード (5.2 KB)

セッションやクエリ文字列などへの値の入出力を、簡潔かつタイプセーフな方法で行うためのクラスの設計を紹介します。

目次

はじめに

 ASP.NETで利用可能なオブジェクトとしてセッション、クッキー、クエリ文字列などがあります。これらのオブジェクトは、画面の表示内容を決定するための入力引数や、複数のリクエストにまたがった状態を記憶するためなどの用途で利用されます。ASP.NETではこれらのオブジェクトが簡単に利用できるようになっていて非常に便利ですが、いくつか不満な点もあります。

 不満な点の一つ目は、セッションはObject型、クエリ文字列とクッキーはString型でデータのやり取りをする点です。例えばInt32型のデータをセッションから取得する際には型変換が必要になります。これらの型変換は値を取得するたびに発生するので、アプリケーション全体で見るとそれなりにコストがかかることが考えられます。

 2つめは、キーを文字列で入力して値を引き出す場合、キーを打ち間違う可能性がある点です。例えば、

String itemCD = Session["ItemCD"].ToString();

 という形で値を取得する場合などです。このコードには誤りがありますが皆さんお気づきでしょうか?

 実はmがm(全角)になっています。

 このようにキーの打ち間違いというバグが混入する可能性もあります。本稿ではこの2つの点を改善するためのクラスを作成する方法を紹介します。

対象読者

  • C#とASP.NETが分かる人
  • より高品質な、再利用性・保守性・堅牢性に優れたコードを効率よく書きたい人

SValueクラス

 まずは最終的なクラスのソースコードを示します。

namespace Higuchi.Web
{
    public class SValue
    {
        public static Object Get(Int32 index)
        {
            return HttpContext.Current.Session[index];
        }
        public static Object Get(String name)
        {
            return HttpContext.Current.Session[name];
        }
        private SValue()
        {
        }
        public static Guid? CD
        {
            get { return Cast.ToGuid(SValue.Get(ID.CD)); }
            set { HttpContext.Current.Session[ID.CD] = value; }
        }
        public static Guid? DiaryCD
        {
            get { return Cast.ToGuid(SValue.Get(ID.DiaryCD)); }
            set { HttpContext.Current.Session[ID.DiaryCD] = value; }
        }
        public static Guid? FolderCD
        {
            get { return Cast.ToGuid(SValue.Get(ID.FolderCD)); }
            set { HttpContext.Current.Session[ID.FolderCD] = value; }
        }
        public static Int32? Count
        {
            get { return Cast.ToInt32(SValue.Get(ID.Count)); }
            set { HttpContext.Current.Session[ID.Count] = value; }
        }
        public class ID
        {
            public const String CD = "CD";
            public const String DiaryCD = "DiaryCD";
            public const String FolderCD = "FolderCD";
            public const String Count = "Count";
        }
    }
}

 SValueクラスはセッションへのデータの出し入れを管理するクラスです。

 名前は「SessionValue」とするのが素直な命名規則なのですが、SessionValueとするとインテリセンスで選択するときに手間がかかるので私は「SValue」という名前にしています。

 同様にクエリ文字列は「QValue」、クッキーは「CValue」、フォームパラメータは「PValue」、ビューステートは「VValue」にしています。

 それではSValueを例にクラスのポイントを解説していきます。


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

あなたにオススメ

著者プロフィール

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5