如何正确接口现有的密封类?

狄翁五世

在CodeReview上检查了我的代码之后,我陷入了一个问题,即如何使我的代码更加抽象。

正如您在这里看到的,许多建议我应该创建一个ICommandandIConnection接口,以使其易于重构。

在我的示例中,我将只使用IConnection,但整体也应适用于ICommand

我认为我必须创建一个这样的接口;

public interface IConnection
{
     //etc...
}

然后,为了MySqlConnection能够从my继承IConnection,我必须创建自己的MySqlConnection这样继承的东西。

public class MySqlConnection : MySql.Data.MySqlClient.MySqlConnection, IConnection
{
     //etc...
}

这意味着新MySqlConnection仍然有其方法和字段,会继承IConnection然后,我应该可以编写这样的Database类;

public abstract class Database
{
    protected IConnection con;
}

并像这样扩展它;

public class MySqlDatabase : Database
{
    private override IConnection con = new MySqlConnection();
}

现在,我的问题MySqlConnectionsealed我无法扩展它,因此我不知道使该数据库类抽象的任何选择。

问题是; 有没有适当的方法来实现的抽象Database?如果是,我该怎么做?

请注意,此问题与类为单例无关(如我的CodeReview帖子中所示)。该问题已经发出,与该问题无关。

埃文维斯

阅读有关代码审查的注释,我实际上认为它们意味着使用IDbConnectionIDbCommand而不是自己动手编写所有ADO.NET提供程序都已经实现了这些功能。

不过,如果你愿意,你可以继承DbConnectionIConnection包装MySqlConnection您必须实现所有DbConnection方法并将它们中继到包装的连接:

public sealed class MyMySqlConnection : DbConnection, IConnection
{
    public MyMySqlConnection(MySqlConnection underlyingConnection)
    {
        UnderlyingConnection = underlyingConnection;
    }

    public MySqlConnection UnderlyingConnection
    {
        get;
        private set;
    }

    public override void Open()
    {
        UnderlyingConnection.Open();
    }

    // ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何正确接口现有的密封类?

来自分类Dev

为现有的类创建接口吗?

来自分类Dev

如何为现有的ruby项目创建Java接口

来自分类Dev

如何使用JMX监视现有的Java类?

来自分类Dev

如何从库中覆盖现有的核心类?

来自分类Dev

如何在Typescript中扩展现有的类

来自分类Dev

如何扩展现有的 PHP 日历类

来自分类Dev

C# - 扩展现有框架密封类

来自分类Dev

在进行现有类的本地继承时如何实现接口

来自分类Dev

无法正确检查现有的Cookie

来自分类Dev

Java覆盖现有的类方法

来自分类Dev

从现有的CSS类继承

来自分类Dev

我可以将pyNaCl密封盒与现有的openssh密钥对一起使用吗?

来自分类Dev

将现有API与新类接口

来自分类Dev

将现有API与新类接口

来自分类Dev

Autofac 如何帮助您同时在现有类中注入类/接口的多个实例

来自分类Dev

使用直接Lua,如何公开现有的C ++类objec以在Lua脚本中使用?

来自分类Dev

如何将对象添加到现有的类对象

来自分类Dev

如何将Parse的PFObject改造为现有的复杂聚合模型类?

来自分类Dev

如何将新类添加到现有的edmx文件

来自分类Dev

如何为新的面板类重复使用现有的布局代码?

来自分类Dev

如何在打字稿中扩展现有的类

来自分类Dev

如何将wcf服务添加到现有的类库

来自分类Dev

如何在现有的第三方扩展中重写/扩展Magento类

来自分类Dev

Python,如何将现有的父类对象转换为子类对象

来自分类Dev

如何从现有的TensorFlow数据集中删除某些类(标签和图像)?(时尚MNIST)

来自分类Dev

如何将新类添加到现有的edmx文件

来自分类Dev

如何将对象添加到现有的类对象

来自分类Dev

如何在asp.net mvc中向现有的类或对象添加新类型

Related 相关文章

热门标签

归档