单例设计模式是获取数据库连接的首选

本文关键字:数据库连接 获取 设计模式 单例 | 更新日期: 2023-09-27 17:56:44

我看到许多开发人员为数据库连接创建了单例类。我只想知道当应用程序被许多用户使用时是好是坏。如果不好,请讨论上述模式可能发生的所有不良情况。

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");
}

单例设计模式是获取数据库连接的首选

我看不出这个类有什么好处。如果你想要这样(我不赞成它),你不会比一堆静态方法获得任何好处。单一实例有什么用?如何将 SqlConnection 变量放入using块中?

我认为对于想要全局变量的人来说,单例是一种过度使用的模式,但读过一本书,其中提到了全局变量不好的事实。现在他们找到了另一本书,说"单例"是一种模式,模式是"好的",他们终于有借口拥有一个全局。

作为全局变量是单例的副作用。如果您将其用于副作用,则不是对该模式的良好使用。我会说这是一种虐待。

单例几乎不可能进行单元测试。这个甚至不是线程保存,对非单例没有任何用处。所以从我的角度来看...删除类。

有多少人使用该应用程序无关紧要。每个人都有自己的过程,它自己的单例,尽管这可能很糟糕。