SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 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を例にクラスのポイントを解説していきます。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
クラスの作成

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

Higty(Higty)

C#マスターになるべく勉強中の身分です。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1048 2007/09/30 09:37

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング