Добрый день.
Подскажите пожалуйста, не могу разобраться. Существуют провайдеры подключения к БД: OLE DB, ODBC, ADO.
Хочется реализовать интерфейс, через который будет обращаться объект к БД, и в зависимости от БД выбирать тот или иной способ (провайдера) для подключения.
Вопрос к какому паттерну можно подвести данный вид. Адаптер, стратегия или что-то другое? Сам я уже запутался. Спасибо!
Здравствуйте, Sibnet, Вы писали:
S>Добрый день. S>Подскажите пожалуйста, не могу разобраться. Существуют провайдеры подключения к БД: OLE DB, ODBC, ADO. S>Хочется реализовать интерфейс, через который будет обращаться объект к БД, и в зависимости от БД выбирать тот или иной способ (провайдера) для подключения. S>Вопрос к какому паттерну можно подвести данный вид. Адаптер, стратегия или что-то другое? Сам я уже запутался. Спасибо!
Будете ржать, но тут получается фабрика фабрик, метафабрика если угодно: сначала выбираем провайдера, потом просим полученную фабрику сгенерить соединение,команду etc.
Посмотрите например как оно в ADO.NET реализовано.
Здравствуйте, Sibnet, Вы писали:
S>Добрый день. S>Подскажите пожалуйста, не могу разобраться. Существуют провайдеры подключения к БД: OLE DB, ODBC, ADO. S>Хочется реализовать интерфейс, через который будет обращаться объект к БД, и в зависимости от БД выбирать тот или иной способ (провайдера) для подключения.
Сначала нужно ответить на такие вопросы:
— Откуда берутся описания БД? (Где они хранятся?)
— Как активизируется связь (connection) с БД?
— Как она прекращается (где реализован close)?
— Как приложение идентифицирует экземпляр связи?
— Какие операции (кроме перечисленных выше) нужны приложению для работы с БД? Как их сгруппировать?
S>Вопрос к какому паттерну можно подвести данный вид. Адаптер, стратегия или что-то другое? Сам я уже запутался. Спасибо!
А на этот вопрос вообще не надо отвечать до того, как получена первая версия интерфейса. Интересно, что после получения этой самой первой версии ответ появится автоматически.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Sinix, Вы писали:
bt>>Таки фабрика. S>Будете ржать, но тут получается фабрика фабрик, метафабрика если угодно: сначала выбираем провайдера, потом просим полученную фабрику сгенерить соединение,команду etc.
Таки фабричный метод (если реализовывать так, как в ADO.NET).
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, Sinix, Вы писали:
bt>>>Таки фабрика. S>>Будете ржать, но тут получается фабрика фабрик, метафабрика если угодно: сначала выбираем провайдера, потом просим полученную фабрику сгенерить соединение,команду etc.
_FR>Таки фабричный метод (если реализовывать так, как в ADO.NET).
Таки фабрика на провайдера а дальше да, фабричный метод.
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Здравствуйте, server_mouse, Вы писали:
bt>>>>Таки фабрика. S>>>Будете ржать, но тут получается фабрика фабрик, метафабрика если угодно: сначала выбираем провайдера, потом просим полученную фабрику сгенерить соединение,команду etc. _FR>>Таки фабричный метод (если реализовывать так, как в ADO.NET).
_>Таки фабрика на провайдера а дальше да, фабричный метод.
Не мог бы ты объяснить, почему? Что в АДО.НЕТ является "фабрикой на провайдера"?
Разница между фабрикой и фабричным методом, по сути, в том, что фабрика предоставляет интерфейс для создания семейства объектов (CreateCommand, CreateCommandBuilder, CreateConnection, …) в то время как фабричный метод служит для создания объектов одного единственного типа.
Help will always be given at Hogwarts to those who ask for it.
+1, но вся эта терминология с паттернами иногда так расплывчата
Я вот какую мысль сказать хочу, что DbProviderFactories.GetFactory(string) — это наверно просто метод возвращающий экземпляр фабрики по идентификатору или может это регистратор, но не фабричный метод. А фабричный метод, как паттерн — это когда наследник определяет логику создания и конкретный тип возвращаемого объекта.
BB>+1, но вся эта терминология с паттернами иногда так расплывчата BB>Я вот какую мысль сказать хочу, что DbProviderFactories.GetFactory(string) — это наверно просто метод возвращающий экземпляр фабрики по идентификатору или может это регистратор, но не фабричный метод. А фабричный метод, как паттерн — это когда наследник определяет логику создания и конкретный тип возвращаемого объекта.
А паттерн абстрактная фабрика состоит из нескольких паттернов фабричный метод, где конкретные наследники определяют логику создания семейства объектов.
Здравствуйте, _FRED_, Вы писали:
_>>Таки фабрика на провайдера а дальше да, фабричный метод.
_FR>Не мог бы ты объяснить, почему? Что в АДО.НЕТ является "фабрикой на провайдера"?
_FR>В моём понимании System.Data.Common.DbProviderFactories.GetFactory(string) является фабричным методом, конструирующим фабрику System.Data.Common.DbProviderFactory.
_FR>Разница между фабрикой и фабричным методом, по сути, в том, что фабрика предоставляет интерфейс для создания семейства объектов (CreateCommand, CreateCommandBuilder, CreateConnection, …) в то время как фабричный метод служит для создания объектов одного единственного типа.
Здравствуйте, _FRED_, Вы писали:
_FR>Разница между фабрикой и фабричным методом, по сути, в том, что фабрика предоставляет интерфейс для создания семейства объектов (CreateCommand, CreateCommandBuilder, CreateConnection, …) в то время как фабричный метод служит для создания объектов одного единственного типа.
А вот тут я чесно говоря не согласен. В моём представлении это выглядит так:
— Фабричный метод есть продукт наследования и часто метод этот может быть protected. Т.е. то как описал господин BluntBlind.
— Фабрика же предоставляет public interface для создания чего-то. И не обязательно разнотипного. За возвращаемым интерфейсом может стоять что угодно. Вообще, "абстрактная фабрика" как она описано в GOF — имхо весьма редкий случай. Гораздо чаще приходиться иметь дело со static factory.
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус