Để làm theo những gì người khác đã nói. Tôi có xu hướng có hai lớp:
Lớp lõi. Điều này nằm trong một DLL được thêm vào gần như tất cả các dự án ứng dụng web . Trong phần này, tôi có một lớp SessionVars mà grunt hoạt động cho getters / setters trạng thái phiên. Nó chứa mã như sau:
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;
}
}
Lưu ý các yếu tố chung để nhận bất kỳ loại nào.
Sau đó, tôi cũng thêm Getters / Setters cho các loại cụ thể, đặc biệt là chuỗi vì tôi thường thích làm việc với string.Empty hơn là null cho các biến được hiển thị cho Người dùng.
ví dụ:
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);
}
Và như thế...
Sau đó, tôi tạo các trình bao bọc để trừu tượng hóa nó và đưa nó lên mô hình ứng dụng. Ví dụ: nếu chúng tôi có thông tin chi tiết về khách hàng:
public class CustomerInfo
{
public string Name
{
get
{
return SessionVar.GetString("CustomerInfo_Name");
}
set
{
SessionVar.SetString("CustomerInfo_Name", value);
}
}
}
Bạn hiểu ý tưởng phải không? :)
LƯU Ý: Chỉ cần suy nghĩ khi thêm nhận xét vào câu trả lời được chấp nhận. Luôn đảm bảo các đối tượng có thể tuần tự hóa khi lưu trữ chúng trong Session khi sử dụng máy chủ trạng thái. Có thể quá dễ dàng để thử và lưu một đối tượng bằng cách sử dụng generic khi ở trên trang web và nó phát triển vượt bậc. Tôi triển khai trên trang trại web tại nơi làm việc nên đã thêm các kiểm tra vào mã của tôi trong lớp lõi để xem liệu đối tượng có thể tuần tự hóa hay không, một lợi ích khác của việc đóng gói Trình nhận phiên và Trình thiết lập :)