0

我一直在玩 MVC4,我创建了一个数据访问层,它目前是一个单例。

我的问题是,这是个好主意吗?我的层中有一个轮询方法,这是我将其设为单例的主要原因(此轮询方法检查数据库,然后使用信号器更新 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());
    }
}
4

2 回答 2

2

您将不得不处理单例或静态类的线程问题。锁定有帮助,但它会使事情变慢,特别是因为您没有检查实例是否在锁定之前已经设置。

此外,很难对代码进行单元测试。

我建议DataAccessLayer使用构造函数在控制器中设置一个实例。IoC 容器或自定义控制器工厂可用于创建类实例并将其传递给控制器​​。

为了更容易进行单元测试/模拟,IDataAccessLayer为具体类实现一个接口并将其用作控制器构造函数中的参数类型。

于 2013-01-08T16:11:40.530 回答
-1

在这种情况下,单例是不必要的。在这里使用 DataAccessLayer 作为静态类更合适:

public class HomeController : Controller
{
    public ActionResult GetUsers()
    {
        return View(DataAccessLayer.GetUsers());
    }
}
于 2013-01-08T15:41:54.810 回答