Russian Qt Forum

Qt => Вопросы новичков => Тема начата: mwChief от Март 03, 2011, 23:30



Название: Отделение логики от интерфейса
Отправлено: mwChief от Март 03, 2011, 23:30
Возникла необходимость написать небольшую программу которая работает с базой данный. Программа имеет несколько диалоговых окон, в разных окнах могут отображаться разные таблицы базы. Также использую QSettings для хранения настроек. И вот решая вопрос использования всеми окнами одного объекта класса QSqlDatabase и одного объекта QSettings (сейчас передаю указатели в качестве параметра конструкторам классов дочерних окон) словил себя на том что у меня логика работы программы перемешана с интерфейсом. Как с этим бороться и стоит ли? И где нужно проводить эту границу, если она есть?


Название: Re: Отделение логики от интерфейса
Отправлено: Eten от Март 04, 2011, 08:10
Если я тебя правильно понял, то у тебя есть несколько мест с хранением данных, которые обрабатываются через два объекта. Тогда все это относится к MVC модели.  ;)


Название: Re: Отделение логики от интерфейса
Отправлено: shirushizo от Март 04, 2011, 10:39
QSqlDatabase можно создать и открыть в main.cpp. Все запросы и модели принимают в конструктор название соединения.

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


Название: Re: Отделение логики от интерфейса
Отправлено: Igors от Март 04, 2011, 13:08
...словил себя на том что у меня логика работы программы перемешана с интерфейсом. Как с этим бороться и стоит ли? И где нужно проводить эту границу, если она есть?
Бороться стОит (пусть часто в этой борьбе побеждает змий  :)) Для начала "на уровне cpp файлов", напр. эти файлы используют QtGui, а эти нет, так же и с базой. Вероятно придется добавить несколько простеньких классов "адаптеров", но эффект получается положительный.


Название: Re: Отделение логики от интерфейса
Отправлено: mwChief от Март 04, 2011, 19:58
Спасибо за ответы. В целом проблем с использованием базы и настроек в разных окнах нет. Меня больше всего интересовало как отделять логику работы программы от интерфейса. Как я понимаю в маленьких программах с интерфейсом от этого просто не уйти, либо же это приведет к излишнему усложнению, но хотелось бы знать как это вообще делается в бОльших проектах.