![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Здравствуйте,
Пишу библиотеку для работы с базой данных. Создаю базовый абстрактный класс DataSet. От него буду наследовать к примеру MySQLDataSet, MSSQLDataSet, OracleDataSet...и так далее. Встал перед несколькими вопросами. 1. Что будет возвращять функция Query? Подумалось вернуть ссылку на тип QueryResult (другой абстрактный класс) в котором в свою очередь нужно реализовать методы Next, Prev...и так далее.
Как возвращять QueryResult? как обьект его копировать нельзя (класс абстрактный), а по ссылке - что возвращять? не хранить же все созданные обьекты в DataSet и возвращять на них ссылки..можно через std::auto_ptr, но в этом случае обращяться к обьекту придеться только через -> а мне нужны операторы. К примеру
какие нибудь идеи? вплоть до корневого изменения архитектуры. Большое спасибо |
||||
|
|||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
что именно почему?
почему через -> или почему мне нужны операторы? ![]() 1. почему через -> ответ: А как еще? std::auto_ptr имеет оператор -> и разименовки..но не предлагаете же вы писать
или
или вообще так
2. почеу нужны операторы ![]() Это сообщение отредактировал(а) azesmcar - 9.10.2008, 11:01 |
||||||
|
|||||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Сделай объект- обертку, в него положи умный указатель на свой резалт (auto_ptr использовать нельзя - он не копируется, нужен указатель с подсчетом ссылок); для необходимых операторов реализуй форвард-заглушки...
Возвращать указатель на динамический объект тоже плохо - а вдруг его авто-птр не поймает? И останется висеть память... И потом, указатель с подсчетом ссылок позволяет разделять объекты, не задумываясь о времени жизни. -------------------- ... |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Мне кажется тему нужно было назвать не "Архитектура класса сойденинения с базой данных", а "Дизайн класса сойденинения с базой данных", так как архитектура может быть только там, где больше одного класса
![]() |
|||
|
||||
Lycifer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
Правила хорошо пррограммирования говорит что возврощать указатель - это плохо, указатель должен быть передан в функцию где его будут заряжать то и есть функция должна вернуть выполнилась ли операция успешно,но при это не распределять память на указать и не обнулять, функция имеет права доступатся к память на который указывает указатель.
Плохих последствий много(возврощения указателя из функции так где он заряжается) |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
не стоит изобратеть велосипеды. поглядите как сделана NHivernate (.NET) или ADO.NET вообще. Там архитектура продумана как надо (иначе бы ими не пользовались, не так ли?).
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |