В настоящее время я создаю приложение на C #, которое поддерживает базы данных MySQL и MSSQL. У меня проблема с моей оберткой. Мой код работает для MySQL, но у меня возникают проблемы с его изменением для поддержки нескольких баз данных.
Если вы посмотрите на урезанную версию моего кода, вы увидите, что у меня есть объект dbConn типа DBMySQL, что хорошо, если я хочу только поддержку MySQL. Мне нужно изменить DBMySQL, чтобы он был чем-то общим, чтобы я мог запустить dbConn = new DBMySQL (...) и dbConn = DBMSSQL (...), а затем просто вызвать dbConn.SomeMethod () и заставить его работать с соответствующей базой данных , Я бы предпочел сохранить эту настройку в максимально возможной степени, поскольку в моих классах DBMySQL и DBMSSQL есть другие вещи для массовой вставки в базы данных и проверки конкретных ошибок.
Я думал / пытался объявить что-то вроде Object dbConn, затем манипулировал этим, но это не так хорошо. Затем я попытался использовать класс объектов enum, но у меня тоже были проблемы с этим. Я знаю, что есть много сторонних библиотек, которые делают все это, но я бы предпочел использовать свой собственный код.
У кого-нибудь есть предложения, как мне изменить мой DBWrapper для решения этой проблемы?
//WRAPPER CLASS THAT CALLS DBMySQL, ISSUE IS I NOW NEED TO SUPPORT
//DBMSSQL as well, not just DBMySQL
class DBWrapper
{
DBMySQL dbConn;
public DBWrapper(...,string type)
{
if(type.Equals("MySQL")
{
dbConn = new DBMySQL(...);
}
//NEED TO REWORK TO SUPPORT THIS BELOW!!
else if(type.Equals("MSSQL")
{
//NEED TO MODIFY TO SUPPORT MSSQL
//ISSUE IS DbConn is of type DBMySQL
//SO I CANNOT GO
// DbConn = new DBMSSQL(...);
// any ideas?
}
}
public void setQuery(string myquery)
{
dbConn.setQuery(myquery);
}
}
class DBMySQL
{
public string dbinfo;
string query;
public DBMySQL(...)
{
dbinfo = ...;
}
public void setQuery(...)
{
query = myquery;
}
}
//NEED TO RE-WORK WRAPPER TO SUPPORT THIS
class DBMSSQL
{
public string dbinfo;
string query;
public DBMSSQL(...)
{
dbinfo = ...;
}
public void setQuery(...)
{
query = myquery;
}
}
На данный момент я был бы признателен за любую помощь, поэтому, если вы просматриваете этот пост и у вас есть идея, пожалуйста, дайте мне знать, поскольку я уже потратил на это целый день.