在CodeReview上检查了我的代码之后,我陷入了一个问题,即如何使我的代码更加抽象。
正如您在这里看到的,许多建议我应该创建一个ICommand
andIConnection
接口,以使其易于重构。
在我的示例中,我将只使用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();
}
现在,我的问题MySqlConnection
是sealed
;我无法扩展它,因此我不知道使该数据库类抽象的任何选择。
问题是; 有没有适当的方法来实现的抽象Database
?如果是,我该怎么做?
请注意,此问题与类为单例无关(如我的CodeReview帖子中所示)。该问题已经发出,与该问题无关。
阅读有关代码审查的注释,我实际上认为它们意味着使用IDbConnection
,IDbCommand
而不是自己动手编写。所有ADO.NET提供程序都已经实现了这些功能。
不过,如果你愿意,你可以继承DbConnection
和IConnection
和包装的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] 删除。
我来说两句