我的代码是这样的:
public string ReadName(int ID)
{
if(db.Name == "mysql") return mysql.ReadName(ID);
else if(db.Name == "oracle") return oracle.ReadName(ID);
}我有很多这样的函数。有没有一种方法可以让我不必在每个函数中重复if-else?
谢谢
发布于 2017-05-15 22:58:35
您可以定义一个接口:
public interface IMyDb
{
string ReadName(int ID);
}然后让每个特定于数据库的类实现它:
public class MySqlDb : IMyDb
{
public string ReadName(int ID)
{
// you have already written the code for this method
}
}然后,当您的应用程序初始化时,您只有一个开关:
IMyDb dbImpl;
switch (db.Name)
{
case "mysql":
dbImpl = new MySqlDb();
break;
case "oracle":
...
}最后,您可以调用该方法,而不必担心您在幕后使用的是哪个类:
string name = dbImpl.ReadName(23);发布于 2017-05-15 22:57:42
继承:
创建基类接口oracle数据库和mysql
发布于 2017-05-15 23:03:15
**编辑:我在看到有人回复之前写了这篇文章...无论如何,这只是小片段的相同想法**
首先,如果你不了解OOP的优点和继承,你就不能解决这个问题。如果oracle和mysql继承自相同的泛型类型(类或接口),则可以只使用多态性。最好的选择是保留对正确数据库的引用,并在构造函数中对其进行初始化。
public interface DbInterface {
... Generic method declaration
}
public class Mysql :db {
... Generic method implementation
}
public class Oracle :db {
... Generic method implementation
}
public class YourClass {
private DbInterface _db;
public YourClass(DbInterface db) {
this._db = db;
}
}然后,每次您使用_db时,您肯定知道它就是您想要的数据库。
https://stackoverflow.com/questions/43982548
复制相似问题