Какой уровень разделения должны иметь элементы пользовательского интерфейса и объекты модели? - PullRequest
0 голосов
/ 03 января 2011

Я создаю настольное приложение в QT (хотя это может быть неактуально), и мне трудно работать со структурой и макетом класса.Модель данных довольно проста с корневым контейнером с несколькими контейнерами элементов.Рассмотрим следующее представление:

Root
+ Parent
  + Child

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

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

В настоящее время я разделяю виджеты пользовательского интерфейса и объекты модели, но каждый виджет и соответствующий объект модели, указывающие друг на друга и друг от друга, кажутся громоздкими, и я думаю, что это приводит к слишком большому обслуживанию.*

Ответы [ 2 ]

5 голосов
/ 03 января 2011

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

В то время как шаблон MVC имеет много разновидностей, одним из способов достижения этого было бы наличие класса представления, который отслеживает модель на предмет любых изменений и обновляет представление соответствующим образом (это можно сделать, подключив слот в представлениикласс для сигнала, испускаемого из класса модели).Любые изменения, которые пользователь инициирует через представление, могут быть:

1) обработаны напрямую моделью через простое соединение сигнал / слот
2) обработаны классом контроллера, который может направить модель на соответствующее обновление

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

Я бы рекомендовал прочитать Руководство по программированию модели / вида Qt , чтобы лучше понятькак MVC работает в Qt и посмотреть, существует ли существующий класс или интерфейс (например, QAbstractItemModel ), который вы можете использовать вместо выпекания своего собственного.

0 голосов
/ 03 января 2011

Рассмотрите возможность использования заводского шаблона и шаблона команды. Есть много образцов. Я просто даю подсказку здесь.

http://en.wikipedia.org/wiki/Factory_method_pattern

http://en.wikipedia.org/wiki/Command_pattern

Забыл упомянуть о книге qt: cartan-cas-dot-suffolk-dot-edu / oopdocbook / HTML /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...