静态与非静态网络代码库

4
我最近发现了一篇关于Web API / Angular网站开发的优秀教程。在跟随教程时,我注意到有些存储库是静态的,而其他存储库则是非静态的存储库为何会有静态和非静态之分?是为了性能?并发问题?
2个回答

4

虽然人们可能认为这是一个基于观点的问题,但是对于这个问题有一个非常真实的客观答案。

在任何涉及到线程、多用户或多个“视图”的情况下使用静态数据上下文都是一个极其糟糕的想法。

让我们来看一下这里:

public static List<Employee> InsertEmployee(Employee e)
{
    dataContext.Employees.Add(e);
    dataContext.SaveChanges();
    return GetAllEmployees();
}

看起来很无害,对吧?错了。这个方法会保存上下文检测到的任何更改。这包括其他用户和/或线程所做的更改。

例如,我们正在获取系统中的所有员工。我们没有告诉实体框架不要跟踪这些实体。

public static List<Employee> GetAllEmployees()
{
    var query = from employee in dataContext.Employees
                select employee;
    return query.ToList();
}

因此,如果一个线程加载了员工信息并更改了姓名(但尚未保存),然后另一个页面调用InsertEmployee,那么姓名更改也将被保存。

我想不出在ASP.NET应用程序中静态数据上下文不是一个可怕的想法的情况。


我从未考虑过如果静态的话,SaveChanges会影响所有用户。在某些情况下,它可能会带来很多麻烦。最好将所有存储库都设置为非静态,这样可能更安全。 - SILENT

1

没有任何好的理由。

虽然将其实现为静态存储库,但他失去了依赖注入和单元测试的能力,而没有获得任何真正的优势。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接