最好在应用程序中使用抽象覆盖类

本文关键字:抽象 覆盖 应用程序 | 更新日期: 2023-09-27 18:04:55

假设我有一个抽象类,例如DatabaseConnection有3个抽象方法Openconnection, Executequery, closeconnection
这个DatabaseConnection类被不同的类继承,与mysql、oracle、sql server…那么继承阶级的结构是怎样的呢?
创建派生类的实例以增加代码的可维护性和可重用性的最佳方法是什么?

最好在应用程序中使用抽象覆盖类

如果你有一个抽象类:

public abstract class DatabaseConnection
{
   public DatabaseConnection(...) // Optional if you want a base constructor
                                     with or without required parameters.
   public abstract void OpenConnection();
   ...
}

那么实现只需要重写所有内容:

public class SQLServerDatabaseConnection : DatabaseConnection
{
   public SQLServerDatabaseConnection(...) //Whatever params you want
   //Or public SQLServerDatabaseConnection(...) : base (...) //if base has required params
   {
   }
   public override void OpenConnection()
   {
   }
   ...//Overrides for every other pure virtual method
}

您尝试实现的内容与ADO.NET中已经实现的数据提供程序模型非常相似。在System.Data.Common命名空间中有一个抽象层,以DbCommand、DbDataAdapter、DbDataReader等形式存在。然后可以以与数据提供程序无关的方式编写数据访问层(DAL),这意味着可以使用工厂来实例化实现泛型/抽象类和/或接口的实际数据提供程序类型。在ADO中,工厂知道使用所提供的连接字符串的dataProvider属性实例化哪个提供程序。http://www.devx.com/dotnet/Article/27297

首先为类创建一个接口。实现接口的类在被其接口引用时要比在代码中的任何地方直接引用时更容易替换。接口使你的代码更易于维护。

其次,使用注入框架来创建数据库类的实例。

e。使用NInject…在你的应用程序的某个点绑定接口到所需的实现…

Bind<IDatabaseConnection>.To<MySqlConnection>();

在你的应用中创建一个实例…

// Creates an instance of the class bound 
IDatabaseConnection connection = _kernel.Get<IDatabaseConnection>();