有许多关于全局状态替代方案的帖子,但我对在 Web 环境中的实施仍有一些挥之不去的问题。
Session[]
在 ASP.NET 中,存储在会话中的值实际上是全局变量,但如果不借助集合,您似乎无法跨页面和事件合理地存储例如经过身份验证的用户名、权限等。(我通常会使用依赖注入,但您不希望将 viewstate/url 中的这些值传递给客户端。)
因此,我认为全局状态是 Web 开发中必不可少的邪恶(由于 HTTP 的无状态特性),答案就是负责任地使用它。什么是好的外观模式实现?像下面这样的静态类,在会话中只有get
s 和set
s 值,并不能掩盖全局状态。
public class SessionWrapper
{
public static string UserName
{
get { return Convert.ToString(Session["UserName"]); }
set { Session["UserName"] = value; }
}
public static bool IsAuthenticated
{
get { return Convert.ToBoolean(Session["IsAuthenticated"]); }
set { Session["IsAuthenticated"] = value; }
}
}