И снова паттерны
От: Sibnet  
Дата: 27.04.09 13:50
Оценка:
Добрый день.
Подскажите пожалуйста, не могу разобраться. Существуют провайдеры подключения к БД: OLE DB, ODBC, ADO.
Хочется реализовать интерфейс, через который будет обращаться объект к БД, и в зависимости от БД выбирать тот или иной способ (провайдера) для подключения.
Вопрос к какому паттерну можно подвести данный вид. Адаптер, стратегия или что-то другое? Сам я уже запутался. Спасибо!
Re: И снова паттерны
От: bt  
Дата: 27.04.09 13:58
Оценка:
Здравствуйте, Sibnet, Вы писали:

S>Добрый день.

S>Подскажите пожалуйста, не могу разобраться. Существуют провайдеры подключения к БД: OLE DB, ODBC, ADO.
S>Хочется реализовать интерфейс, через который будет обращаться объект к БД, и в зависимости от БД выбирать тот или иной способ (провайдера) для подключения.
S>Вопрос к какому паттерну можно подвести данный вид. Адаптер, стратегия или что-то другое? Сам я уже запутался. Спасибо!

Таки фабрика.
Re[2]: И снова паттерны
От: Sinix  
Дата: 28.04.09 00:58
Оценка:
Здравствуйте, bt.

bt>Таки фабрика.


Будете ржать, но тут получается фабрика фабрик, метафабрика если угодно: сначала выбираем провайдера, потом просим полученную фабрику сгенерить соединение,команду etc.

Посмотрите например как оно в ADO.NET реализовано.
Re: И снова паттерны
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 28.04.09 21:19
Оценка: +1
Здравствуйте, Sibnet, Вы писали:

S>Добрый день.

S>Подскажите пожалуйста, не могу разобраться. Существуют провайдеры подключения к БД: OLE DB, ODBC, ADO.
S>Хочется реализовать интерфейс, через который будет обращаться объект к БД, и в зависимости от БД выбирать тот или иной способ (провайдера) для подключения.

Сначала нужно ответить на такие вопросы:

— Откуда берутся описания БД? (Где они хранятся?)
— Как активизируется связь (connection) с БД?
— Как она прекращается (где реализован close)?
— Как приложение идентифицирует экземпляр связи?
— Какие операции (кроме перечисленных выше) нужны приложению для работы с БД? Как их сгруппировать?

S>Вопрос к какому паттерну можно подвести данный вид. Адаптер, стратегия или что-то другое? Сам я уже запутался. Спасибо!


А на этот вопрос вообще не надо отвечать до того, как получена первая версия интерфейса. Интересно, что после получения этой самой первой версии ответ появится автоматически.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[3]: И снова паттерны
От: VGn Россия http://vassilsanych.livejournal.com
Дата: 29.04.09 07:51
Оценка: :))) :)))
S>Будете ржать, но тут получается фабрика фабрик,
Главное, чтоб не получилась фабрика велосипедов
... << RSDN@Home 1.2.0 alpha 4 rev. 1138>>
Re[3]: И снова паттерны
От: _FRED_ Черногория
Дата: 29.04.09 08:20
Оценка: 14 (2)
Здравствуйте, Sinix, Вы писали:

bt>>Таки фабрика.

S>Будете ржать, но тут получается фабрика фабрик, метафабрика если угодно: сначала выбираем провайдера, потом просим полученную фабрику сгенерить соединение,команду etc.

Таки фабричный метод (если реализовывать так, как в ADO.NET).
Help will always be given at Hogwarts to those who ask for it.
Re[4]: И снова паттерны
От: Sinix  
Дата: 29.04.09 08:49
Оценка:
Здравствуйте, _FRED_, Вы писали:

Спасибо, учтём
Re[4]: И снова паттерны
От: server_mouse Беларусь about:blank
Дата: 04.05.09 16:45
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, Sinix, Вы писали:


bt>>>Таки фабрика.

S>>Будете ржать, но тут получается фабрика фабрик, метафабрика если угодно: сначала выбираем провайдера, потом просим полученную фабрику сгенерить соединение,команду etc.

_FR>Таки фабричный метод (если реализовывать так, как в ADO.NET).


Таки фабрика на провайдера а дальше да, фабричный метод.
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Re[5]: И снова паттерны
От: _FRED_ Черногория
Дата: 05.05.09 05:54
Оценка: 1 (1)
Здравствуйте, server_mouse, Вы писали:

bt>>>>Таки фабрика.

S>>>Будете ржать, но тут получается фабрика фабрик, метафабрика если угодно: сначала выбираем провайдера, потом просим полученную фабрику сгенерить соединение,команду etc.
_FR>>Таки фабричный метод (если реализовывать так, как в ADO.NET).

_>Таки фабрика на провайдера а дальше да, фабричный метод.


Не мог бы ты объяснить, почему? Что в АДО.НЕТ является "фабрикой на провайдера"?

В моём понимании System.Data.Common.DbProviderFactories.GetFactory(string) является фабричным методом, конструирующим фабрику System.Data.Common.DbProviderFactory.

Разница между фабрикой и фабричным методом, по сути, в том, что фабрика предоставляет интерфейс для создания семейства объектов (CreateCommand, CreateCommandBuilder, CreateConnection, …) в то время как фабричный метод служит для создания объектов одного единственного типа.
Help will always be given at Hogwarts to those who ask for it.
Re[6]: И снова паттерны
От: BluntBlind  
Дата: 05.05.09 06:23
Оценка: 33 (1) +1
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, server_mouse, Вы писали:


...

_FR>В моём понимании System.Data.Common.DbProviderFactories.GetFactory(string) является фабричным методом, конструирующим фабрику System.Data.Common.DbProviderFactory.


...

+1, но вся эта терминология с паттернами иногда так расплывчата
Я вот какую мысль сказать хочу, что DbProviderFactories.GetFactory(string) — это наверно просто метод возвращающий экземпляр фабрики по идентификатору или может это регистратор, но не фабричный метод. А фабричный метод, как паттерн — это когда наследник определяет логику создания и конкретный тип возвращаемого объекта.
Re[7]: add
От: BluntBlind  
Дата: 05.05.09 06:27
Оценка:
BB>+1, но вся эта терминология с паттернами иногда так расплывчата
BB>Я вот какую мысль сказать хочу, что DbProviderFactories.GetFactory(string) — это наверно просто метод возвращающий экземпляр фабрики по идентификатору или может это регистратор, но не фабричный метод. А фабричный метод, как паттерн — это когда наследник определяет логику создания и конкретный тип возвращаемого объекта.

А паттерн абстрактная фабрика состоит из нескольких паттернов фабричный метод, где конкретные наследники определяют логику создания семейства объектов.
Re[7]: И снова паттерны
От: _FRED_ Черногория
Дата: 05.05.09 08:05
Оценка:
Здравствуйте, BluntBlind, Вы писали:

_FR>>В моём понимании System.Data.Common.DbProviderFactories.GetFactory(string) является фабричным методом, конструирующим фабрику System.Data.Common.DbProviderFactory.

BB>…А фабричный метод, как паттерн — это когда наследник определяет логику создания и конкретный тип возвращаемого объекта.

И правда.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Help will always be given at Hogwarts to those who ask for it.
Re[6]: И снова паттерны
От: server_mouse Беларусь about:blank
Дата: 05.05.09 12:57
Оценка:
Здравствуйте, _FRED_, Вы писали:

_>>Таки фабрика на провайдера а дальше да, фабричный метод.


_FR>Не мог бы ты объяснить, почему? Что в АДО.НЕТ является "фабрикой на провайдера"?


_FR>В моём понимании System.Data.Common.DbProviderFactories.GetFactory(string) является фабричным методом, конструирующим фабрику System.Data.Common.DbProviderFactory.


_FR>Разница между фабрикой и фабричным методом, по сути, в том, что фабрика предоставляет интерфейс для создания семейства объектов (CreateCommand, CreateCommandBuilder, CreateConnection, …) в то время как фабричный метод служит для создания объектов одного единственного типа.



Под "фабрикой в начале" я имел ввиду упомянутый вами System.Data.Common.DbProviderFactory.
А под "Фабричным методом" вот это:
System.Data.Common.DbConnection.CreateCommand
System.Data.Common.DbCommand.CreateDbParameter
Эти методы как раз и попадают под классическое определение фабричного метода.
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Re[6]: И снова паттерны
От: server_mouse Беларусь about:blank
Дата: 05.05.09 13:09
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Разница между фабрикой и фабричным методом, по сути, в том, что фабрика предоставляет интерфейс для создания семейства объектов (CreateCommand, CreateCommandBuilder, CreateConnection, …) в то время как фабричный метод служит для создания объектов одного единственного типа.


А вот тут я чесно говоря не согласен. В моём представлении это выглядит так:
— Фабричный метод есть продукт наследования и часто метод этот может быть protected. Т.е. то как описал господин BluntBlind.
— Фабрика же предоставляет public interface для создания чего-то. И не обязательно разнотипного. За возвращаемым интерфейсом может стоять что угодно. Вообще, "абстрактная фабрика" как она описано в GOF — имхо весьма редкий случай. Гораздо чаще приходиться иметь дело со static factory.
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.