Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
18 июля 2018 г. 11:20

Разделение интерфейса и логики приложения

Qt

Добрый день!
Возник такой интересный вопрос: хочется в программе, которая использует базы данных полностью или по максимуму разделить интерфейс и логику работы с самой базой данных.
С таблицами, выборками и поиском все ясно, их необходимо с использования QTableModel, QRelationTableModel и т.д. перевести на QSqlquery.
Вопрос в том как быть с полями редактирования данных (QLineEdit, QTextEdit и др.)?
Работа с ними организована при помощи QDataWidgetMapper. Выполнять запрос Sql и потом из него вытягивать результаты и раскидывать по нужным полям (по очереди в цикле) или есть другой вариант.
И как быть с тем, что таблиц много и писать под каждую свой запрос не очень то и хочется (это только для отображения данных в таблице, а еще и редактирование данных / отдельная форма с QLineEdit, QTextEdit и др. под каждую таблицу/ ).
Больше хочется сделать, что-то универсальное, чтобы не пришлось в классах форм писать что-то типа:
MyClass *class = new MyClass();
class.sql("SELECT ... FROM ...");

то-есть описывать сам запрос в классе формы.
Как можно поступить в данной ситуации?


5

Добрый день!

Ой зря Вы это затеяли. Модели данных - это как раз и есть логика, а всякие QTableView, QTableWidget - это представление, интерфейс приложения.
В рамках использования Qt, переводить всё на QSqlQuery - это неправильно, человек, который будет после вас поддерживать этот код, как первым делом займется тем, что будет обратно переписывать всё на модели.
Вы можете сделать классс фассад базы данных для чего-то совсем специфического, а для всего остального оставьте мапперы и модели. Они для этого и были придуманы и написаны, чтобы стандартизировать и упорядочить доступ к данным через интерфейс.


0
Спасибо, а то я чуть не согрешил :).
Фасад для подключения к базе данных написан ( спасибо за статью :) ).

P.S. Вопрос возник из-за просьбы вынести работу с базой данных в отдельный файл / файлы.
0

Проанализируйте, что именно можно вынести в качестве функционала, который не требует представления в виде таблиц или маппинга в диалоги. То и переносите.

Возможно потребуется что-то продублировать, чтобы получать вектор объектов или ещё что-то в этом роде. Но модели и мапперы оставьте, иначе наделаете себе уйму головной боли в будущем.
0
Все, что касалось подключения к базе, проверки логина и пароля и еще несколько аспектов работы с ней, вынес еще на начальном этапе.
Написал свой класс для форм (вынес в них общую логику), создал модели для QComboBox и QListView.
Уже остались только стандартные модели и мапперы. Значит больше выносить не чего.

Огромное спасибо еще раз !
1

Получается, что так. Успехов.

0

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
ДД
13 декабря 2018 г. 16:24
Дмитрий Дубовик

C++ - Тест 005. Структуры и Классы

  • Результат:66баллов,
  • Очки рейтинга-1
13 декабря 2018 г. 16:04
Metelev

Qt - Тест 001. Сигналы и слоты

  • Результат:47баллов,
  • Очки рейтинга-6
YC
12 декабря 2018 г. 18:49
Yaroslav Chernetskyi

Qt - Тест 001. Сигналы и слоты

  • Результат:31баллов,
  • Очки рейтинга-10
Последние комментарии
V
15 декабря 2018 г. 2:06
Vlad15007

Спасибо большое!Очень помогли!
11 декабря 2018 г. 21:01
Евгений Легоцкой

Не знаю, какой-там конкретно эффект и если честно не хочется fl studio ради того, чтобы посмотреть устанавливать, но из того, что увидел в интернете. Предполагаю, что то, что вы хотите с...
V
11 декабря 2018 г. 19:25
Vlad15007

Подскажите пожалуйста ( я новичок совсем)Можно ли организовать спрайт без этого окошка (как в fl studio fruity dance)?
11 декабря 2018 г. 15:06
Евгений Легоцкой

Что интересно, если написать так from <application_name>.<module_name> import <filename> ,то PyCharm сносит крышу, если разрабатываешь в рамках проекта приложение, ко...
11 декабря 2018 г. 14:52
Илья Чичак

Тут мне тоже есть что сказать=) Сами разрабы советуют импортировать следующим образом: from <application_name> import <module_name> Стоит избегать from . import &l...;
Сейчас обсуждают на форуме
17 декабря 2018 г. 17:55
Евгений Легоцкой

Просчитывать перекрытие точек и не отрисовывать те точки, которые перекрываются другими. У вас их просто слишком много, нужно смотреть, какие можно не отрисовывать без потери информативн...
R
16 декабря 2018 г. 14:41
RED_Spider

перевірено все працює http://doc.qt.io/qt-5/appicon.html Setting the Application Icon on Windows First, create an ICO format bitmap file that contains the icon image. This ca...
16 декабря 2018 г. 11:26
Евгений Легоцкой

Только статические методы и участники класса можно вызывать подобным образом Cell::sum У вас же они нестатические, чтобы их вызывать, нужно иметь объект Cell. Вы его, конечно, со...
q
15 декабря 2018 г. 23:02
qdu10719

Понял, спасибо большое
БГ
14 декабря 2018 г. 17:44
Булат Гиниятов

Большое всем спасибо за помощь! Использую вариант с QList.
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы