Структура проекта Qt - нужен совет

В настоящее время я работаю над проектом на основе Qt4/QtCreator. Я хотел бы попросить у Вас совета, как организовать мою заявку.

  • Есть 3 отдельных инструмента, у каждого свой вид. Все представления интегрированы в главное окно в виде незакрываемых вкладок. Я подготовил 3 вида: Tool1View, Tool2View, Tool3View

  • Предполагается, что каждый инструмент выполняет какую-то задачу, вызванную действиями пользователя. Но это не операции, связанные с базой данных (список/добавление/изменение...) - по крайней мере, пользователь не будет добавлять/изменять/списывать записи в элементах графического интерфейса.

Я думаю реализовать каждый инструмент в 2 классах:

  • Первоклассный ToolXView, реализующий виджет и все задачи, связанные с изменениями графического интерфейса.

  • ToolX второго класса, реализующий логику приложения. Функции-члены этого класса запускаются классом View. Всякий раз, когда этот класс должен обновить элементы графического интерфейса, он вызывает специализированные функции в классе View. Таким образом, отсюда не выполняются прямые вызовы виджетов.

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

Теперь мне интересно, хороший ли это путь. Пожалуйста, посоветуйте мне, исходя из Вашего опыта.

  1. Я планирую инкапсулировать указатель на логический класс как свойство класса представления и указатель на класс представления как свойство логического класса. Таким образом, я планирую интегрировать их.

  2. Должен ли я использовать сигналы/слоты для обеспечения связи или просто вызывать функции-члены?

  3. Мне придется хранить некоторые данные в базе данных QtSql. Должен ли я предоставить отдельный класс для доступа к базе данных. Или просто реализовать отдельную функцию-член внутри класса Logic?

  4. Как вы называете свои классы. Эта схема хороша или ее надо менять?

Спасибо за помощь. Я ценю ваши комментарии.


person Community    schedule 29.03.2011    source источник


Ответы (1)


Использование архитектуры mvc прекрасно.

1 и 2 – по приведенной выше ссылке вы увидите UML-диаграмму архитектуры mvc. Что касается этого, я бы подключил сигналы представления к методам контроллера, а затем вызвал бы метод представления из контроллера.

3 – Что касается доступа к базе данных, я бы добавил в вашу архитектуру часть доступа к данным, которая специализируется на доступе к данным. У вас может быть интерфейс для определения подписи объекта доступа к данным, а затем реализация его в специализированном классе для базы данных (таким образом, вы сможете изменить местоположение данных без изменения всего приложения).

4 – название вашего класса кажется хорошим. Но я бы пошел дальше и назвал классы:

  • Для просмотра: ClassNameView
  • Для контроллера: ClassNameController
  • Для DataAccessObject: ClassNameDAO
  • Модель: ClassName (и IClassName для интерфейса)

надеюсь, это поможет

person Patrice Bernassola    schedule 29.03.2011
comment
Считаете ли вы, что модель MVC применима, даже если нет базы данных для хранения данных, поэтому нет DAO и класса модели? Должен ли я по-прежнему называть класс Logic контроллером? - person ; 29.03.2011
comment
DAO используется не только для доступа к базе данных. Ваши данные могут храниться в файлах или даже в другой базе данных. DAO — это всего лишь абстрактный уровень, из которого вы реализуете нужные вам специализированные классы. - person Patrice Bernassola; 29.03.2011
comment
Но в этом проекте большинство модулей вообще не хранят данные :) Именно это я и имел в виду. Я знаком с парадигмой MVC, и мне интересно, подходит ли она сюда. - person ; 29.03.2011
comment
В вашем случае вам нужна архитектура MVC с 3 слоями. DAO используется в MVC с 5 слоями. - person Patrice Bernassola; 30.03.2011
comment
Хорошо, я немного запутался :) Как мне реализовать контроллер под qt? Я нашел статью, описывающую мою форму как контроллер, представления как виджеты qt и модель как класс, реализующий логику. Ты согласен с этим ? - person ; 30.03.2011
comment
Представление — это один или набор виджетов (с помощью QtCreator можно создать класс дизайнера [не помню название опции]). Контроллер — это простой класс с полем, которое ссылается на представление. - person Patrice Bernassola; 30.03.2011