クラスの作成
1.Getメソッドの作成
このクラスのポイントはHttpContextクラスのCurrentプロパティを利用することです。このプロパティを使用すると現在実行されているリクエストにおけるHttpContextクラスのインスタンスを取得できます。このプロパティ経由でSessionStateやQueryStringにアクセスします。
毎回、HttpContext.Current.Sessionと記述するのは煩わしいので、SValueクラスにstaticなGetメソッドを定義しておきます。これで、SValue.Get("CD")でソースコードのどこからでもセッションから値を取得できるようになりました。
「aspx.cs」ファイルの中ではSession["CD"]でも値を取得できますが、「App_Code」フォルダのファイルの中ではSession["CD"]で値を取得することはできません。これは「aspx.cs」ファイルに記述されているクラスがPageクラスの派生クラスだからです。「aspx.cs」ファイルではSeeion["CD"]という記述により、継承元のPageクラスのSessionというプロパティ経由でSessionの値にアクセスすることが可能です。
「App_Code」フォルダではページクラスの派生クラスの内部ではないのでそういうわけにもいきません。ですので、HttpContext.Current経由でアクセスするように記述することで、ソースコードのどの部分であっても同じ書き方で値を取得できるようになります。
このように記述することで「aspx.cs」に記述したセッションから値を取得するコードを「App_Code」に移動することになってもコードを変更する必要がなくなり、コードの再利用がしやすくなるでしょう。
2.IDクラスの作成
IDの記述ミスの可能性を削減するためにアプリケーションで使用するIDの一覧を表現するクラスを作成しておきます。クラスを定義する際にインナークラスとして定義しておけば、他のQValueやCValueでも名前の衝突を避けることができます。
このIDクラスを使用して、SValue.Get(SValue.ID.Count)というようにインテリセンスの力を借りながらコードを記述すれば、打ち間違いによるバグの混入を避けることが可能になり、堅牢性の向上が期待できます。
3.タイプセーフなプロパティの作成
最後にタイプセーフなプロパティを作成します。
ここでは私が作成したCastクラスを使用して型変換しています。.NET Framework 2.0では、値型の各クラスにTryParseメソッドが実装されています。これを利用することで型変換を.NET Framework 1.1のときよりも簡単に実現することができます。
Castクラスはこの型変換をさらに簡単に行うためのメソッドをまとめて定義したクラスです。詳細はサンプルのソースコードをご覧ください。
このようなプロパティをSValueクラスに定義することで、利用側はSValue.Count(Int32型)というように簡潔に値を取得できます。

インテリセンスを利用すれば定義されているキーが一覧で見れるので、わざわざ仕様書などでキーを確認する手間を省くことができ、効率のアップとバグの発生確率の低減が期待できます。
またタイプセーフであるということはもうひとつのメリットがあります。例えばキーがItemCDからItemIDに変更になったときに、SValueクラスのプロパティを変更してコンパイルすると、SValue.ItemCDと記述してある部分がすべてコンパイルエラーとなってリストアップされます。リストアップされた部分を全て修正すれば、修正漏れすることなくアプリケーションの修正を完了させることができます。Session["ItemCD"]と記述していると文字列検索で修正対象の箇所をリストアップする必要があり、より多くの手間と検索漏れが発生する可能性が高まります。タイプセーフであることにより変更に対する保守性が大幅に向上します。
まとめ
同様のクラス設計でクエリ文字列やクッキーの値を出し入れするクラスを作成できます。これらのオブジェクトへの値の入出力はアプリケーションの全体に渡って行われるので、この部分のコードを簡潔に記述できるような仕組みを導入することで再利用性・堅牢性・保守性の向上、ひいてはアプリケーション全体の品質の向上につながるでしょう。
この記事が皆さんの参考になれば幸いです。
