换行的替代方法 ADO.net

Alternative for wraping ADO.net

我正在使用以下 class 来包装我的 CRUD 操作:

public class DAL
    {
        private MySqlConnection conn;
        private MySqlCommand cmd = new MySqlCommand();
        private MySqlDataAdapter adap = new MySqlDataAdapter();
        private MySqlDataReader dr;


        public MySqlDataReader Dr
        {
            get { return dr; }
            set { dr = value; }
        }

        public MySqlDataAdapter Adap
        {
            get { return adap; }
            set { adap = value; }
        }

        public MySqlCommand Cmd
        {
            get { return cmd; }
            set { cmd = value; }
        }

        public MySqlConnection Conn
        {
            get { return conn; }
            set { conn = value; }
        }

        public DAL(IConfiguration configuration)
        {
            this.conn = new MySqlConnection(configuration.GetConnectionString("DefaultConnection"));
        }


        public DAL(string constr)
        {

            this.conn = new MySqlConnection(constr);

        }

   }

这里有些专业人士说我的 DAL Class 很糟糕,因为 this

说实话我不是很懂。但没问题。 你说把Ado.net换行不对。所以我不再这样做了。 只有一个问题。如果我必须将数据库从 MySql 更改为 MSSQL 会怎样? 我怎样才能像只更改一个文件而不是更多文件来更改数据库那样编写代码。 我应该怎么做?

你应该使用接口。 通过示例而不是 returning “MySqlDbConnection”,您可以 return 一个“IDbConnection”。

在那种情况下,调用者只会知道这是一个数据库连接。无论是 MySQL 还是 SQL 服务器连接。

这样,唯一知道 MySql 的文件就是您的 DAL class。

这些接口已经存在(IDbConnection、IDbCommand、...)所以不需要自己创建。

编辑:

在下面的例子中我修改了一些东西:

  • 使用接口(或抽象classes)
  • 使用命名准则 + readonly 关键字
  • 使用全名命名事物(正如@pinkfloydx33 在评论中所建议的那样)这将有助于提高可读性。例如,您用于连接字符串的参数名称是“constr”,对我来说,最初的意思是“构造函数”(无需阅读以下行)。

未解决的问题:

  • DbConnection 的用法(正如您在 post 中提到的,您应该再次阅读您链接的问题,因为如果它是生产代码,它 can/will 会导致这样的问题)。

可能的改进:

  • 使用 ORM 或像 Dapper 这样的库(如评论中@insane_developer 所建议)

     public class DAL
     {
         private readonly IDbConnection _connection;
         private DbCommand _command = new MySqlCommand();
         private IDbDataAdapter = new MySqlDataAdapter();
         private IDataReader _dataReader;
    
         public IDataReader DataReader
         {
             get { return _dataReader; }
             set { _dataReader = value; }
         }
    
         public IDbDataAdapter Adapter
         {
             get { return _adapter; }
             set { _adapter = value; }
         }
    
         public DbCommand Cmd
         {
             get { return _command; }
             set { _command = value; }
         }
    
         public IDbConnection Connection
         {
             get { return _connection; }
             set { _connection = value; }
         }
    
         public DAL(IConfiguration configuration)
         {
             this._connection = new MySqlConnection(configuration.GetConnectionString("DefaultConnection"));
         }
    
         public DAL(string connectionString)
         {
             this._connection = new MySqlConnection(connectionString);
         }
    
    }
    

这样只有 class 知道您正在使用的 DBMS 类型。