我应该在 C#.net 中使用静态类进行数据库连接吗?

本文关键字:数据库连接 静态类 net 我应该 | 更新日期: 2023-09-27 17:56:32

我有一个包含所有数据库连接活动的类。我想知道的是,我是否应该将这个类设置为静态的,然后我可以在任何地方调用而无需创建它。但是该应用程序在同一时间在同一网络中的不同PC上运行。

否则

我是否应该通过继承它创建一个可以在其他类中使用的普通类?

我应该在 C#.net 中使用静态类进行数据库连接吗?

您应该考虑这样一个事实,即使类静态化使它们难以进行单元测试。

以下是讨论该主题的两个链接:对于单元测试来说,静态是普遍"邪恶的"吗?如果是这样,为什么 resharper 推荐它?

静态方法对可测试性不利

基本上,使事物静态也使它们难以隔离和删除依赖项。

静态类可能会稍微整理你的代码。这不是一个坏主意。

但我不确定这与在同一网络上的不同PC上运行的应用程序有什么关系。

除了整理之外,还有一个很好的理由说明为什么建立数据库连接的类应该是静态的。通常在应用程序中,您只需要一个数据库连接。它通常的设计方式是,你有一个带有静态方法的静态类。首次调用时,静态方法检查连接对象是否为 null。如果是,它将创建一个新连接并返回此连接。对于将来的调用,该方法将只返回此连接。这也使确保关闭连接变得更加简单,因为现在您只需要此类中关闭此连接的另一种静态方法。希望有帮助。

做你最有能力处理的事情 跟。

在这种情况下

,是否将数据访问类设为static与类的目的无关(纯粹的数据访问)。更重要的是,它应该与项目或系统的整体设计保持一致,对于你和团队成员来说,它应该易于维护。我建议根据表访问拆分类,并使它们在设计方面对称。话虽如此,您应该小心数据访问类的一些重要问题是......

  • 您将如何处理数据库连接的生命周期?
  • 您将如何处理并发和缓存(如果使用)?
不使用

静态类,你可以使连接字符串成为静态的,因为当多个用户访问静态类时可能会出现问题

我不会选择静态类。 它可能会整理,但总是有利有弊。 我也会远离继承一些基类。 正如GoF所说:赞成组合而不是继承。

所以工厂会在这里派上用场:

    private IDatabaseConnectionFactory databaseConnectionFactory;
    public SomeClass() : this(new DatabaseConnectionFactory()) { }
    public SomeClass(IDatabaseConnectionFactory factory) 
    {
        databaseConnectionFactory = factory;
    }
    .
    .
    using (var connection = DatabaseConnectionFactory.Create()) { ... }
    .
    .

DatabaseConnectionFactory 被注入或传入的位置。