上有替代全局状态提供了许多职位,但我有一个关于在网络环境中实现挥之不去的问题。全球范围内减少状态
在ASP.NET中,存储在会话值实际上是全局变量,但似乎你不能合理地存储,例如,认证的用户名,权限等跨页和事件而不诉诸Session[]
集合。 (我通常会使用依赖注入,但你不希望将这些值在视图状态/ 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; }
}
}
我不知道我是否理解这个问题。你是否说你需要避免在服务器上存储状态(例如在数据库或内存缓存中)? –
我不明白你的问题以太。 (请问你可以发一些关于全局状态的替代方法吗?) – Aristos
不,我在问如何在大型Web应用程序中避免全局变量的所有典型缺陷,这些大型Web应用程序通常必须使用会话(例如,用于身份验证值,设置等)。参见[为什么是全球国家如此邪恶?(http://programmers.stackexchange.com/questions/148108/why-is-global-state-so-evil) –