Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Архитектура класса сойденинения с базой данных |
Автор: azesmcar 9.10.2008, 10:49 | ||||
Здравствуйте, Пишу библиотеку для работы с базой данных. Создаю базовый абстрактный класс DataSet. От него буду наследовать к примеру MySQLDataSet, MSSQLDataSet, OracleDataSet...и так далее. Встал перед несколькими вопросами. 1. Что будет возвращять функция Query? Подумалось вернуть ссылку на тип QueryResult (другой абстрактный класс) в котором в свою очередь нужно реализовать методы Next, Prev...и так далее.
Как возвращять QueryResult? как обьект его копировать нельзя (класс абстрактный), а по ссылке - что возвращять? не хранить же все созданные обьекты в DataSet и возвращять на них ссылки..можно через std::auto_ptr, но в этом случае обращяться к обьекту придеться только через -> а мне нужны операторы. К примеру
какие нибудь идеи? вплоть до корневого изменения архитектуры. Большое спасибо |
Автор: Daevaorn 9.10.2008, 10:53 | ||
![]() |
Автор: azesmcar 9.10.2008, 11:00 | ||||||
что именно почему? почему через -> или почему мне нужны операторы? ![]() 1. почему через -> ответ: А как еще? std::auto_ptr имеет оператор -> и разименовки..но не предлагаете же вы писать
или
или вообще так
2. почеу нужны операторы ![]() |
Автор: Earnest 10.10.2008, 18:30 |
Сделай объект- обертку, в него положи умный указатель на свой резалт (auto_ptr использовать нельзя - он не копируется, нужен указатель с подсчетом ссылок); для необходимых операторов реализуй форвард-заглушки... Возвращать указатель на динамический объект тоже плохо - а вдруг его авто-птр не поймает? И останется висеть память... И потом, указатель с подсчетом ссылок позволяет разделять объекты, не задумываясь о времени жизни. |
Автор: Lazin 10.10.2008, 18:39 |
Мне кажется тему нужно было назвать не "Архитектура класса сойденинения с базой данных", а "Дизайн класса сойденинения с базой данных", так как архитектура может быть только там, где больше одного класса ![]() |
Автор: Lycifer 16.10.2008, 11:41 |
Правила хорошо пррограммирования говорит что возврощать указатель - это плохо, указатель должен быть передан в функцию где его будут заряжать то и есть функция должна вернуть выполнилась ли операция успешно,но при это не распределять память на указать и не обнулять, функция имеет права доступатся к память на который указывает указатель. Плохих последствий много(возврощения указателя из функции так где он заряжается) |
Автор: jonie 16.10.2008, 21:19 | ||
не стоит изобратеть велосипеды. поглядите как сделана NHivernate (.NET) или ADO.NET вообще. Там архитектура продумана как надо (иначе бы ими не пользовались, не так ли?).
|