Я разрабатываю приложение Winforms, которое содержит строку подключения для подключения к базе данных SQL Server и говорит, что у меня есть 15 различных запросов, которые мне нужно запускать в течение всей моей программы, называемой query1, query2,...query15
.
Я хотел бы расширить свои возможности программы, чтобы пользователь мог также использовать другие типы баз данных, такие как Oracle, MySql и Sqlite. Это означает, что будут разные версии моих 15 запросов для каждого типа.
Я хочу собрать все мои сценарии запросов в одном месте, чтобы мои вызовы могли просто ссылаться на них по именам, например, InsertNewCustomer(string name)
а затем мой шаблон - глядя на тип соединения, который я установил внутри своей программы, будет запускать соответствующий метод,
Как я могу достичь такого поведения?
Я предлагаю вам шаблон Factory и Strategy. Что он делает, так это то, что на фабрике есть все экземпляры/типы ваших стратегий (в данном случае типы базы данных).
Вот вам макет кода, чтобы вы начали.
public class DatabaseStrategyFactory
{
private static DatabaseStrategyFactory _instance;
private Dictionary<string, Strategy> _collection;
private DatabaseStrategyFactory()
{
}
// singleton pattern
public static DatabaseStrategyFactory Instance { get { return _instance ?? (_instance = new DatabaseStrategyFactory()); }}
public static Initialize()
{
// load all strategies either by creating instances or storing the type
if(_collection == null)
{
_collection = new Dictionary<string, Strategy>();
_collection.Add(*string key either by class name/enum or whatever you want*, instance or type);
}
}
public Strategy GetStrategy(string name)
{
if(_collection == null)
throw new Exception();
Strategy strategy = null;
_collection.TryGetValue(name, out strategy);
return strategy;
}
}
Sql Server
отличается от вставкиMySql
. Я ищу запрос, чтобы принять это решение для меня.