关联还是继承? [英] Association or Inheritance?
问题描述
我有一些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屋!