关联还是继承? [英] Association or Inheritance?

查看:61
本文介绍了关联还是继承?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些SQLite数据库,主要处理3个类.

1.连接的基本SQLiteDatabase类

I have some SQLite Databases and i have 3 classes for the main handling.

1. A base SQLiteDatabase Class for the Connection

public class SQLiteDatabase
{
    public SQLiteDatabase(string databasePath);

    public void OpenConnection();
    public void CloseConnection();
    protected DataReader ExecuteReader(string sql);
    protected void ExecuteNonQuery(string sql);
}



2.用于处理表格的类,例如创建表格.



2. A Class for handling the Tables like create a table.

public class SQLiteDatabaseTableHandler: SQLiteDatabase
{
    public SQLiteDatabaseTableHandler(string databasePath)
        : base(databasePath)
    {
    }
    public void CreateTable(IDatabaseTable table) { }
    public void UpdateTableCompatibility(IDatabaseTable table) { }
}



3.我的应用程序指定了Database类,以便从自己的数据库中获取一些东西.



3. My application specified Database class for getting some stuff from the own Database.

public class ConcreteSQLiteDatabase : SQLiteDatabase
{
    public ConcreteSQLiteDatabase(string databasePath)
        : base(databasePath)
    {
    }
    public SQLiteDataReader GetSpecifiedStuff(string id)
    {
        ExecuteReader("SELECT * FROM specified_table");
    }
    public SQLiteDataReader GetOtherSpecifiedStuff(string id)
    {
        ExecuteReader("SELECT * FROM other_specified_table");
    }
    // ...
}



在我的ConcreteSQLiteDatabase类中,我需要SQLiteDatabaseTableHandler中的方法.有两种方法可以实现:

1.继承

我可以在我的ConcreteSQLiteDatabase中从SQLiteDatabaseTableHandler而不是SQLiteDatabase使用继承.

像这样



In my ConcreteSQLiteDatabase class i need methods from the SQLiteDatabaseTableHandler. There are 2 ways to make it possible:

1. Inheritance

I can use a Inheritance in my ConcreteSQLiteDatabase from the SQLiteDatabaseTableHandler instead of SQLiteDatabase.

Like this

public class ConcreteSQLiteDatabase : SQLiteDatabaseTableHandler


代替


instead of

public class ConcreteSQLiteDatabase : SQLiteDatabase



2.协会

我的ConcreteSQLiteDatabase类可以有一个SQLiteDatabaseTableHandler的实例,因此我可以使用该实例中的方法.

像这样



2. Association

My ConcreteSQLiteDatabase class could have a instance of a SQLiteDatabaseTableHandler, so i can use the methods from the instance.

Like this

public class ConcreteSQLiteDatabase : SQLiteDatabase
{
    public SQLiteDatabaseTableHandler TableHandler{get;set;}
    public ConcreteSQLiteDatabase(string databasePath)
        : base(databasePath)
    {
        TableHandler = new SQLiteDatabaseTableHandler( databasePath );
    }
}



我不知道在这种情况下应该使用哪种方式,关联还是继承?

对不起,我的英语不好...



I don''t know which way should i use in this case, Association or Inheritance?

Sorry for my bad english...

推荐答案

我想向您建议第三种最好的方法,同时也是最佳的方法.

要创建ConcreteSQLiteDatabase,只需使用SQLiteDatabaseTableHandler类的关联,而无需像下面的任何内容派生它.

I would like to suggest you third way that is best and also optimized.

For creating ConcreteSQLiteDatabase just use association of SQLiteDatabaseTableHandler class without deriving it from anything just like following.

public class ConcreteSQLiteDatabase
{
    public SQLiteDatabaseTableHandler TableHandler{get;set;}
    public ConcreteSQLiteDatabase(string databasePath)
    {
        TableHandler = new SQLiteDatabaseTableHandler(databasePath);
    }
}




因为在这种情况下,如果您使用关联,则不需要为ConcreteSQLiteDatabase类派生任何东西.


HTH




Because if you use association then you do not need to derive anything for your ConcreteSQLiteDatabase class in this scenario.


HTH


这篇关于关联还是继承?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆