繁体   English   中英

最佳使用应用程序中的抽象覆盖类

[英]Best use abstract override classes in application

假设我有3种抽象方法一个抽象类,如的DatabaseConnection OpenconnectionExecutequerycloseconnection
这个DatabaseConnection类是由不同的类继承的,以与mysql,oracle,sql server建立连接...那么继承的clasess的结构又如何呢?
创建增加代码的可维护性和可重用性的派生类实例的最佳方法是什么?

如果您有一个抽象类:

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
}

首先为该类创建一个接口。 与在代码中的任何地方直接引用接口的类相比,实现接口的类更容易替换。 接口有助于使您的代码更具可维护性。

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

例如,使用NInject ..在您的应用程序中,将接口绑定到所需的实现...

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

在您应用的某处创建实例...

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM