LINUX.ORG.RU

Как решить проблему постоянного прописывания подключения БД?

 , ,


1

3

Мне надо постоянно работать с бд в каждом классе. И от руки прописывать подключение в каждом классе не очень хорошо. Пытался вынести подключение в: отдельную функцию, отдельный класс и от него наследоваться, но подключения нет не видит его. У меня просто тупо дублированный код везде идёт. Как можно это решить?



Последнее исправление: hobbit (всего исправлений: 3)
Ответ на: комментарий от guyvernk

Ну советую хотя бы на хх посмотреть на какой язык открыты вакансии в финтехе.

Он не будет смотреть. Ему только поорать «жаба говно» надо же.

Zhbert ★★★★★
()
Последнее исправление: Zhbert (всего исправлений: 1)

Нет такой проблемы. @unC0Rr выше расписал поподробнее.

Кроме того, в документации к QSqlQuery::QSqlQuery(const QSqlDatabase &db), например, написано:

If db is invalid, the application’s default database will be used.

Но у меня всё равно привычка в db-oriented объекты передавать ссылку на QSqlDatabase, даже если она в программе одна. Не вижу в этом ровно никакого дублирования.

Или ты в каждом классе экземпляр QSqlDatabase создаёшь? Так делать, конечно, не надо. Один раз инициализируешь (можно в MainWindow, можно в каком-нибудь классе-обёртке, если есть какие-то общие функции, можно действительно синглтон сделать, в конце концов) и дальше раздаёшь на него ссылку.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от Zhbert

У меня такой же вопрос в Go возник, кстати. В паре мест пришлось передергивать одинаковым кодом подключение к БД, выделить это в отдельную функцию сходу не получилось.

Базовое решение - вынести настройки в отдельный класс/структуру (или аналог в языкнейм), читать на старте отражение этих настроек где-либо (например из json файла) и доставлять до потребителя тем или иным способом (DI, либо глобальный объект).

Крупные фреймворки (типа Spring, или DI библиотека .NET) на эту основную идею накручивают фичи, такие как:

  • Валидация
  • Прямой доступ к элементам конфига без необходимости создания своей модели
  • Отслеживание изменений
  • Поддержка разных форматов (json/yaml/etc)
  • Поддержка разных источников (файл/переменные окружения/внешние сервисы-хранилища)

Вообще стандартное решение - взять готовый configuration management, который есть для целевой платформы. QSettings в кутях, например.

Midael ★★★★★
()