C# 首选单例设计模式以获得DB连接
我看到许多开发人员为db连接创建了单例类。我只是想知道当应用程序被许多用户使用时,它是好是坏。如果不好,请讨论上述模式可能出现的所有坏情况C# 首选单例设计模式以获得DB连接,c#,oop,singleton,C#,Oop,Singleton,我看到许多开发人员为db连接创建了单例类。我只是想知道当应用程序被许多用户使用时,它是好是坏。如果不好,请讨论上述模式可能出现的所有坏情况 public class ConnSingleton { private static ConnSingleton dbInstance; private readonly SqlConnection conn = new SqlConnection(@"Data Source=127.0.0.1;database=s
public class ConnSingleton
{
private static ConnSingleton dbInstance;
private readonly SqlConnection conn = new SqlConnection(@"Data Source=127.0.0.1;database=soa;User id=sa1;Password=sa1;");
private ConnSingleton()
{
}
public static ConnSingleton getDbInstance()
{
if (dbInstance == null)
{
dbInstance = new ConnSingleton();
}
return dbInstance;
}
public SqlConnection GetDBConnection()
{
try
{
conn.Open();
Console.WriteLine("Connected");
}
catch (SqlException e)
{
Console.WriteLine("Not connected : "+e.ToString());
Console.ReadLine();
}
finally
{
Console.WriteLine("End..");
// Console.WriteLine("Not connected : " + e.ToString());
Console.ReadLine();
}
Console.ReadLine();
return con;
}
}
public static void Main(string[] args)
{
ConnSingleton cs = ConnSingleton.getDbInstance();
cs.GetDBConnection();
Console.WriteLine("Connection Established");
}
我看不出这门课有什么好处。如果您希望这样做(我不赞成这样做),那么与一堆静态方法相比,您没有任何好处。singleton实例有什么好处?如何使用块将SqlConnection变量放入
块中
我认为对于那些想要全局变量的人来说,单例模式是一种过度使用的模式,但是读了一本书,书中提到了全局变量是不好的这一事实。现在他们又找到了另一本书,书中说“单身”是一种模式,模式是“好的”,他们终于有了一个借口,拥有一个全球性的家庭
作为一个全局变量是单例的副作用。如果你使用它的副作用,它不是一个很好的使用模式。我会说这是一种虐待
单例几乎不可能进行单元测试。这一个甚至不是线程保存,对非单例也没有任何用处。所以在我看来。。。删除该类
有多少人使用该应用程序无关紧要。每个都有自己的进程和单例,尽管这可能很糟糕。实际上没有必要保留连接对象。应始终将其包装在一个容器中,并在使用后进行处理。NET还缓存了连接,因此也没有理由保持它打开。我更倾向于使用静态方法来实例化并返回一个新的SqlConnection。我很想知道,当我们使用内置连接池时,是谁创建并维护了连接池。它是由OS、sql server还是dotnet运行时管理的?单例也称为“反模式”。当我们关闭任何sql连接时,连接对象立即移动到池中?@Mou:答案是“这取决于”。你应该问一个新问题才能得到一个好答案。