dilepremon
@dilepremon
Студент-заочник, учусь, работаю

Как правильно спроектировать класс для работы с БД?

Работаю (уже месяц как) в небольшой фирме, пишу проект на C++ с использованием Qt, в качестве базы данных выбрана SQLite. Программистов выше уровнем поблизости нет.

Решил спроектировать отдельный модуль для работы с БД. В БД имеются таблицы: продукт, продавец, продажа. В одном из окон программы таблица, в которую будут подгружаться данные из БД. Там же можно создать новую запись. При нажатии кнопки «Сохранить» сохраняются изменения/появляется новая запись, если ее нет.

У меня уже имеется класс DataBase, отвечающий за подключение к БД, открытие/закрытие соединения, и отправку строки запроса в БД и т.д.
(0) Можно в этот же класс добавить метод, в параметрах которого нужно указывать атрибуты продукта например, для дальнейшего добавления в БД, но их довольно много, и это не кажется мне хорошим подходом.

Можно создать отдельные классы под каждую из таблиц БД.
В этом случае есть несколько вариантов:
(1) В каждом классе создавать методы, отсылающие строку запроса в класс DataBase, но они потребуют наличия экземпляра объекта. Если база данных разрастется, то думаю при ее отображении создание объекта под каждую запись БД значительно замедлит программу.
(2) Сделать эти методы статическими, отсылающими сигнал(событие) например на добавление записи, который будет приниматься слотом(методом, обработчиком события) класса DataBase. Но тогда возникает проблема с соединением сигнала и слота, т. к. для метода connect нужен экземпляр объекта.
(3) Можно вместо классов сделать структуры, но в этом случае мы получаем немного улучшенный вариант (0).

Что из этого стоит выбрать? Или есть какой-то вариант получше?
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
MetaAbstract
@MetaAbstract
Архитектор информационных систем и баз данных. Ful
Наверняка какой то готовый ORM есть под C++, чтобы велосипед не изобретать, но если нет то надо выбрать между паттернами Active Record и DataMapper
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы