| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 вообще. Там архитектура продумана как надо (иначе бы ими не пользовались, не так ли?).
|