c# - 这是单例 + 延迟加载吗?
问题描述
public class UserSession
{
private UserSession()
{
}
public static UserSession Current
{
get
{
var session= (UserSession)HttpContext.Current.Session["_userSession"];
if (session == null)
{
session = new UserSession();
HttpContext.Current.Session["_userSession"] = session;
}
return session;
}
}
public User User { get; set; }
}
//USAGE
UserSession.Current.User
我试图弄清楚这段代码中使用了哪些模式。我的理解是,这是一个
- 单例模式(实际上有一个私有构造函数)和一个
- 延迟加载(或延迟初始化?)因为 GET 的实现方式。
我也很困惑
- 与类相同类型的 UserSession 属性和用法本身对我来说似乎很奇怪。
有人可以解释这里发生了什么吗?
解决方案
在这里我看到单例模式:类的静态方法如果不存在则生成类实例
至于 LazyLoading,我不确定我们能不能看到这样,因为延迟加载的想法是为了节省资源,但在这里我们可以看到一个轻量级的对象
使用类的静态方法来获取同一个类的实例是一种常见的做法,但不是最好的方法。更好的选择是使用上下文来获取类的实例并避免使用静态方法,因为它可以从应用程序的任何位置调用,但在这里我们面临 HttpContext.Current 静态属性,在我看来这本身就是一个设计问题,所以我们可以使用像这样的用户上下文
推荐阅读
- c# - 将参数从视图传递到控制器
- javascript - HTML CSS JavaScript - 自动高度 RWD
- android - 致命信号 4 (SIGILL),代码 1 (ILL_ILLOPC),tid 11821 (Chrome_InProcRe) 中的故障地址 0xc654f6c6,android xwalk webview 中的 pid 11615 (com.OffZone)
- sql - 我必须对 SQL 中的给定结果使用 80/20。有一些可用的资源,但我仍然无法离题
- reactjs - 在 Reactjs 中解析嵌套的 json
- mysql - Kafka 连接(Debezium mysql 连接器)仅监听 table.include.list 中的特定表
- php - 访问控制允许带有和不带有 www 的来源
- javascript - 我想用空格 XX XXX XXX 分隔一个字符串
- python - Python - 如何将字符串列表更改为数据框名称列表
- r - 如何在 Shiny 中隐藏 rhandsontable 元素中的数字