我有一个包含所有数据库连接活动的类。我想知道的是,我是否应该将这个类设置为静态的,然后我可以在任何地方调用而无需创建它。但是该应用程序在同一时间在同一网络中的不同PC上运行。
否则
我是否应该通过继承它创建一个可以在其他类中使用的普通类?
您应该考虑这样一个事实,即使类静态化使它们难以进行单元测试。
以下是讨论该主题的两个链接:对于单元测试来说,静态是普遍"邪恶的"吗?如果是这样,为什么 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 被注入或传入的位置。
呵呵