我在寻找singleton& amp;静态类,我在this question中发现了许多不同之处。但是,其中一些对我来说不是很清楚:
[...]单例可以扩展类和实现接口,而静态类则不能 (它可以扩展类,但不会继承它们的实例成员)。 {source按{neil.johnson}
这两点意味着什么?
有些人说他们使用单例设计模式进行数据库连接,因此整个应用程序中只存在一个连接,并且这个单一连接用于所有请求。单个连接可以处理多个与数据库相关的请求吗?
如果我们应该遵循数据库连接处理的单例模式,请指导我。如果没有,那么请写下所有专业人士和利弊。感谢
答案 0 :(得分:3)
回答你的问题:
对于数据库连接,使用单例来维护在任何地方重用的永久连接确实有某种意义。但是,.NET框架中通常有一种不同的方法:该方法涉及短期生存连接,这种连接仅用于实际需要数据库连接的非常短的持续时间。因此,不是始终保持连接处于活动状态,而是创建连接,执行查询并立即关闭连接。
当然,永久打开和关闭数据库连接存在一些缺点。为了弥补这一点,.NET框架使用了一种池化策略,可以通过非常小的开销快速“创建”大量连接。因此,不是从头开始实际创建真正的连接,而是从连接池获得现有连接,使用它,然后将其释放回连接池。
// create a new connection
using (var connection = new SqlConnection())
{
// work with the connection
doSomethingWith(connection);
}
// connection is now automatically closed and returned to the connection pool
答案 1 :(得分:1)
不要使用单例进行数据库连接。可能根本不使用单身人士,他们严重过度使用,提供的利益很少,并且自己造成麻烦。如果你真的想要使用单身人士,那就不要因为这很困难而让你更加困难。使用依赖注入通常是解决问题的更好方法。
如果您使用Microsoft SQL Server .NET为您管理连接池[1],并且通常没有充分的理由您必须关心创建,销毁和重用与服务器的连接的详细信息。
Microsoft SQL Server 2005及更高版本支持多个活动结果集(MARS)[2],因此您确实可以使用相同的连接运行多个查询。
其他数据库显然会有所不同。我可以详细说明具体的问题,但关于静态类,单例,资源定位器和依赖注入的整个事情只是在一个答案中处理。