他の人が言ったことに従うこと。私は2つの層を持つ傾向があります:
コア層。これは、ほぼすべての Web アプリ プロジェクトに追加される DLL 内にあります。これには、セッション状態のゲッター/セッターの面倒な作業を行う SessionVars クラスがあります。次のようなコードが含まれています。
public class SessionVar
{
static HttpSessionState Session
{
get
{
if (HttpContext.Current == null)
throw new ApplicationException("No Http Context, No Session to Get!");
return HttpContext.Current.Session;
}
}
public static T Get<T>(string key)
{
if (Session[key] == null)
return default(T);
else
return (T)Session[key];
}
public static void Set<T>(string key, T value)
{
Session[key] = value;
}
}
任意の型を取得するためのジェネリックに注意してください。
次に、特定の型、特に文字列の Getter/Setter も追加します。これは、ユーザーに提示される変数に対して、null ではなく string.Empty を使用することが多いためです。
例えば:
public static string GetString(string key)
{
string s = Get<string>(key);
return s == null ? string.Empty : s;
}
public static void SetString(string key, string value)
{
Set<string>(key, value);
}
等々...
次に、ラッパーを作成してそれを抽象化し、アプリケーション モデルに取り込みます。たとえば、顧客の詳細がある場合:
public class CustomerInfo
{
public string Name
{
get
{
return SessionVar.GetString("CustomerInfo_Name");
}
set
{
SessionVar.SetString("CustomerInfo_Name", value);
}
}
}
あなたはその考えを正しく理解していますか?:)
注:受け入れられた回答にコメントを追加するときに考えました。状態サーバーを使用する場合は、オブジェクトを Session に格納するときに、オブジェクトがシリアライズ可能であることを常に確認してください。Web ファームでジェネリクスを使用してオブジェクトを保存しようとするのは非常に簡単で、ブームになっています。私は職場の Web ファームにデプロイするため、コア レイヤーのコードにチェックを追加して、オブジェクトがシリアライズ可能かどうかを確認しました。これは、セッション ゲッターとセッターをカプセル化するもう 1 つの利点です :)