LINUX.ORG.RU

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

 , ,


1

3

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



Последнее исправление: hobbit (всего исправлений: 3)

Ответ на: комментарий от Xintrea

Выделить отдельный класс, с данными для подключения в конструкторе, убивать подключение в деструкторе, выделить нужные методы с валидацией данных. Если есть какие-то конкретные юз-кейсы, то жрать не sql, а данные на вход, самостоятельно конструируя запрос внутри.

Создать синглтон.

Профит

(Если хайлод, хотя какого хрена ТС там забыл с такими данными, то синглтон с асинхронщиной и внутри разруливать между пулом нитей)

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

Это правда так делают в крестах?😁

А как же создать фабрику, в фабрике использовать создание обернутых в пул датасорсов, и фабрикой выдавать конекшены из пула?

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

Java - это говно, где как раз нужны все паттерны, потому как нет модулей… Хотя и без изучения ненужных паттернов и явы можно прийти к выводу о необходимости какой-то единой точки входа, которая будет хранить ссылки на соединения и тп… либо пабсабы, чтобы сообщения отправлять… либо вырожденческие синглтоны и реестры

rtxtxtrx ★★
()

через глобальную переменную

через глобальный объект App с методом getDb который возвращает singelton для работы с бд

ну или по модному DI, передавай как параметр в конструктор каждого класса которому нужна бд

cylon17
()
Ответ на: комментарий от guyvernk

99% хайлоада

Не надо врать. Интерпретируемый язык и хайлоад строго перпендикулярны. Тогда и питон хайлоад, и пхп и даже haskell (хоть и компилируемый, просто хочу хайлоад на хаскеле)

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

99% хайлоада

Не надо врать. Интерпретируемый язык и хайлоад строго перпендикулярны. Тогда и питон хайлоад, и пхп и даже haskell (хоть и компилируемый, просто хочу хайлоад на хаскеле)

Да не. Он имел ввиду 99% лоада и 1% выхлопа )))

anonymous
()
Ответ на: комментарий от guyvernk

А почему знаешь? Всякий банковский софт и прочее откуда наши финтех-варвары то стянули, и на чем он был написан… Карго-культ джавы. В Индии все банки на пхп работают. ПХП - финтех

rtxtxtrx ★★
()
Ответ на: комментарий от Xintrea

Я тупой. Мне тоже интересно как народ решает эту проблему. Видимо, все вокруг знают правильный ответ, и хотелось бы его увидеть в этой теме.

гугли Connection pool

дальше распихиваешь запросы.

Скейлбл!

anonymous
()
Ответ на: комментарий от guyvernk

QSqlDatabase is a value class. Changes made to a database connection via one instance of QSqlDatabase will affect other instances of QSqlDatabase that represent the same connection. Use cloneDatabase() to create an independent database connection based on an existing one.

Warning: It is highly recommended that you do not keep a copy of the QSqlDatabase around as a member of a class, as this will prevent the instance from being correctly cleaned up on shutdown. If you need to access an existing QSqlDatabase, it should be accessed with database(). If you chose to have a QSqlDatabase member variable, this needs to be deleted before the QCoreApplication instance is deleted, otherwise it may lead to undefined behavior.

ой*ляяя весь куте так сделан да? ))))

тоже не осилили ссылки?

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

в том и лол - что избавились от железных(с++ и прочая nil Хоара) - сделали всё такое абстрагированое но жизнь взяла своё

hft и прочии зато переносимо(но не в браузерах)

java отъела нишу и sun :)

ибо вычисляемый индекс (а это и есть по указатель) основа в языках cо случайным доступом к памяти - конечно это не указатели на память сырую а на «тегированную» али через таблицу гарантирующую тип но факт в том что если в языке не отказались от вычисляемых индексов на том или ином уровне вылезут все трудности указателей(возможно тока core dump не будет но и это тож не факт)

для полного избавления от адресной арифметики - нужно что то симд да и ещё с хитрым графом конкурентно(и или паралельно и или серективного по рэндому) а это ой-как (пока нет практик и патернов) слооажна

qulinxao3 ★★
()
Ответ на: комментарий от qulinxao3

ну прям вот то что я хочу разве сложно реализовать?

есть стракт(с полями примитивами), по сути у него есть прототип известного размера. создавать его не в куче копированием прототипа, а на стеке… и жить ему в области видимости, ну или как то реализовать замыкания для него еще

да я даже про рекорды изначально ожидал что их сделают на стеке, ведь по сути финальный обьект - что мешает его копировать в стек?

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

короче подумол как это реализовать и понял что сложна.

передача по значению в замыкания - как вариант, но в случае итеративных вызовов это может просто сожрать всю память.

да видимо придется жить с ссылочными типами

guyvernk
()
Ответ на: комментарий от Eulenspiegel

генезис Golang - есть уже решённое с плохой константой -

дайте то же самое но с константой близкой к «нулю»

даже докер - вторичен

golang так и не похоронил erlang ;)

golang хорош как техничка ;)

qulinxao3 ★★
()
Ответ на: комментарий от Xintrea

Мне тоже интересно как народ решает эту проблему.

Какую проблему-то, я так и не понял в чем проблема одно подключение везде прокинуть?

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от theNamelessOne

да мне это и не нужно уже.

в свое время я хотел или на элик или на эрланг пойти програмулькать. но время решило что жява выбор для любителей стабильности

guyvernk
()
Ответ на: комментарий от qulinxao3

golang так и не похоронил erlang ;)

джаба от мира телекома… вот кто успел, тот и рулит в отрасли… ну этот гомо и не помешал ноде подняться… любая искусственная система стремится к упрощению, правда происходит это через усложнение внутреннего устройства (чтобы сделать шаг, мне не нужно думать, я даже не могу надержать задержать дыхание… вдох произойдет сам, если только не повеситься на люстре)… а значит обречены все эти сложные языки на какие-то маргинальные ниши — буквально там где не справляются python/php/js/java на помощь приходит go… удел у него такой — быть вечным запасным

rtxtxtrx ★★
()
Ответ на: комментарий от Xintrea

Видимо, все вокруг знают правильный ответ, и хотелось бы его увидеть в этой теме.

А как же образование? В МФТИ такую банальщину не проходили? В моем универе действительно не проходили %)

goingUp ★★★★★
()
Ответ на: комментарий от Xintrea

Я тупой.

Как у алкоголиков. Признать это - половина пути к исправлению.

Вообще самокритика мощная весЧЪ…! Я тоже тупой и сюда прихожу не только за ответами, но и почитать комментарии токсичных и узкопрофильных гуру. Так что ты не один такой…=)

Shprot ★★
()
Ответ на: комментарий от PPP328

данными для подключения в конструкторе, убивать подключение в деструкторе

Всегда считал, что конструктор - он для того чтобы корректный объект создать в программе. Пирожки печь заодно (устанавливать соединения) ему не надо.

Psilocybe ★★★★
()

Пытался вынести подключение в: отдельную функцию, отдельный класс и от него наследоваться, но подключения нет не видит его.

Руки кривые. Отладить и привести к рабочему состоянию ты, конечно, не стал.

И от руки прописывать подключение в каждом классе не очень хорошо.

Вообще ответа два всего:

  1. Передавать объект везде как за проезд в маршрутке.

  2. Глобальный стейт (синглтоны, глобальные переменные, переменные в глобальной структуре - всё это принципиально одинаково).

Посмотрел твою кодобазу через астрал и там же тебе самый подходящий вариант из этих отправил.

Bfgeshka ★★★★★
()
Ответ на: комментарий от Xintrea

Видимо, все вокруг знают правильный ответ, и хотелось бы его увидеть в этой теме.

Не, не знают. Просто фыркают на кресты с важным видом.

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

Zhbert ★★★★★
()