![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
cupper |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
Представьте что у вас есть базовый абстрактный класс Database. Есть подклассы Mysql, Oracle, .... Есть фабрика котор умнеет создавать конечные экземпляры, т.е. Mysql, Oracle.
Есть такое понятие как uri_list, для случая распределенной БД. Вопрос, кто должен отвечать за перебор этих самых uri_list в случае реконекта ? Первый способ:
Тут все тривиально, сразу видна логика работа с БД. Конечный экземпляр Database, будь то Mysql или Oracle, знать не знает о том, что у нас может быть несколько БД, незнает о том что нужно делать паузы между реконнектами и тому подобное. Database это примитив который умеет только самое необходимое. Проблема в том что, таких функций some_function в коде может быть несколько, в разных модулях например. И в один прекрасный момент, нужно будет что то поменять в логике работы с БД. В моем случае это было добавление паузы при реконнекте
И как следовало ожидать, в одном месте таки забыли добавить, и вылезло это аж только через пару месяцев. Ужас короче. Второй способ: собственно над ним я сейчас как раз и думаю. Как сделать так что бы не переусложнять примитив Database но при этом спрятать всю логику в одном месте. Например за перключением alias'ов (uri_list) может отвечать фабрика DBFactory. Пихать это в конечную реализацию Mysql не кошерно потому что придется дублировать в других классах типа Oracle. А еще нужно спрятать логирование, паузу при реконнекте, да и сам процесс реконнекта завуалировать под одну операцию а не
PS. почему в топике про С++... не нашел более подходящего, а язык реализации как раз С++ |
||||||
|
|||||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Посмотри, как это сделано у "конкурентов": http://soci.sourceforge.net/
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Сделайте proxy между Database и его клиентами. И пусть этот proxy и обрабатывает реконекты (внутри запроса от клиента)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |