我一直在玩MVC4,我创建了一个目前是单身的数据访问层。
我的问题是,这是一个好主意吗?我在我的图层中有一个轮询方法,这是我使它成为单例的主要原因(此轮询方法检查数据库,然后使用signalr更新UI)
我还认为使用单例是一个好主意,所以我可以缓存数据,但我现在不确定,这个单独应对400个并发用户怎么办?
任何帮助都会很棒!
代码 -
public class DataAccessLayer
{
private static DataAccessLayer _instance;
public static DataAccessLayer Instance
{
get
{
lock (_instance)
{
if (_instance == null)
_instance = new DataAccessLayer();
return _instance;
}
}
}
}
public class HomeController : Controller
{
public ActionResult GetUsers()
{
return View(DataAccessLayer.Instance.GetUsers());
}
}
答案 0 :(得分:2)
您必须使用单例或静态类处理线程问题。锁定会有所帮助,但它会使事情变慢,特别是因为您没有检查实例是否已在锁定之前设置。
此外,单元测试代码也很困难。
我建议使用构造函数在控制器中设置DataAccessLayer
的实例。可以使用IoC容器或自定义控制器工厂来创建类实例并将其传递给控制器。
为了更容易进行单元测试/模拟,为具体类实现一个IDataAccessLayer
接口,并将其用作控制器构造函数中的参数类型。
答案 1 :(得分:-1)
在这种情况下,单身人士不是必需的。使用DataAccessLayer作为静态类更适合:
public class HomeController : Controller
{
public ActionResult GetUsers()
{
return View(DataAccessLayer.GetUsers());
}
}