我看到许多开发人员为数据库连接创建了Singleton类。我只是想知道当许多用户使用应用程序时它是好还是坏。如果不好请讨论上述模式可能出现的所有不良情况。
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");
}
答案 0 :(得分:7)
我从这堂课中看不到任何好处。如果你想要这样(并且我不赞成它)你就没有比一堆静态方法更好的了。单身实例会有什么用处?你如何将SqlConnection变量放在using
块中?
我认为对于想要全局变量的人来说,单例是一种过度使用的模式,但是阅读一本提到全局变量不好的书。现在他们发现另一本书说“单身人士”是一种模式,模式是“好的”,他们最终有借口拥有全球性。
作为全局变量是单身人士的副作用。如果你使用它来产生副作用,那就不能很好地利用这种模式了。我会说这是一种虐待。
单身几乎不可能进行单元测试。这个甚至不是线程保存,并且对非单例没有任何用处。所以从我的角度来看......删除课程。
有多少人使用该应用程序是无关紧要的。每个人都拥有自己的进程,并且拥有自己的单身,这可能是坏事。