Шаблон проектирования, чтобы решить, какой запрос SQL выбрать

1

Я разрабатываю приложение Winforms, которое содержит строку подключения для подключения к базе данных SQL Server и говорит, что у меня есть 15 различных запросов, которые мне нужно запускать в течение всей моей программы, называемой query1, query2,...query15.

Я хотел бы расширить свои возможности программы, чтобы пользователь мог также использовать другие типы баз данных, такие как Oracle, MySql и Sqlite. Это означает, что будут разные версии моих 15 запросов для каждого типа.

Я хочу собрать все мои сценарии запросов в одном месте, чтобы мои вызовы могли просто ссылаться на них по именам, например, InsertNewCustomer(string name) а затем мой шаблон - глядя на тип соединения, который я установил внутри своей программы, будет запускать соответствующий метод,

Как я могу достичь такого поведения?

  • 0
    @KenWhite да, файл конфигурации в настоящее время содержит строку подключения. Но что происходит с запросами? Вставка Sql Server отличается от вставки MySql . Я ищу запрос, чтобы принять это решение для меня.
  • 1
    Да, я неправильно понял ваш вопрос (не уверен, как, теперь, когда я прочитал это снова). Я удалил свой комментарий, чтобы убрать. Благодарю. :-)
Теги:
database
design-patterns
oledb
connection-string

1 ответ

1

Я предлагаю вам шаблон 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;
    }
}

подробнее о Factory и Strategy;

  • 0
    Не могли бы вы ошарашить, чтобы быть немного более конкретным для моего случая?
  • 0
    С фабрикой, это могло держать все экземпляры вашего типа, верно? Если ваш sql-запрос является статическим или не изменяется, у экземпляра может быть закрытое поле строки, содержащее запрос. Таким образом, вы можете иметь несколько классов с конкретными запросами, которые используются только в этом классе. Дайте мне знать, если вам нужно больше разъяснений.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню