Название: Отделение логики от интерфейса Отправлено: 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 Спасибо за ответы. В целом проблем с использованием базы и настроек в разных окнах нет. Меня больше всего интересовало как отделять логику работы программы от интерфейса. Как я понимаю в маленьких программах с интерфейсом от этого просто не уйти, либо же это приведет к излишнему усложнению, но хотелось бы знать как это вообще делается в бОльших проектах.
|