Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> реализация ModelViewController 
V
    Опции темы
asmdzen
Дата 19.10.2012, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: нет
Всего: 5



В общем поскольку с графическими интерфейсами работал мало, с шаблонами проектирования тоже знаком издалека, оказалось что изобрел велосипед под названием Model View Controller. Проблема состоит в том что я не понимаю как реализовать это в своей программе. например есть какой-то обьект, мне надо показать его данные пользователю, решил что этот обьект должен зарегистрироватся в контроллере и передать ему список своих свойств вида (data_type, name, setter(), getter()) где data_type это enum всех возможных типов. Этот подход работает для простых типов типа int, string, double, как его реализовать для контейнеров не решил еще. Как реализовать систему с event'ами тоже без понятия.
Конкретный пример, есть некий модуль (обьект) который занимается скачиванием файлов из сети, мне нужно отобразить его данные пользователю, поскольку интерфейс ничего не знает о реализации этого обьекта при его создании он должен зарегистрироваться в контроллере и передать ему структуру типа {{types::bool, "download enabled", SetDownloadState(), GetDownloadState()}, {types::int, "total bytes downloaded", null, GetDownloadedCount()}, ...
Проблема в том что скачиваемый файл представлен списком пар чисел типа (начало сегмента, конец сегмента), как обьяснить интерфейсу что это такое, как обьяснить как показать это пользователю. Было бы лучше если при поступлении нового сегмента - этот обьект оповещал бы контроллер об этом передавая ему этот сегмент (начало - конец), не понятно это как реализовать только, при помощи call'back'ов как-то?
В общем помогите кто чем может )
PM MAIL   Вверх
xvr
Дата 19.10.2012, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Для того, что бы ваш View мог показать что то из Model, они должны 'говорить на одном языке' - View не смодет показать то, чего не понимает. Так что это ваша задача этот язык обеспечить.
Можно ввести набор предопределенных структур данных, которыми могут обмениваться части MVC. Ваш набор полей - это один из видов структуры обмена данными (назовем ее - PropertySet к примеру). Еще бывают списки, деревья и таблицы. Возможно могут быть и более изощренные структуры данных. 
В любом случае вам надо определиться с этим набором до того как вы начнете писать компоненты MVC

Правда есть варианты с динамически создаваемыми типами данных, но в такие дебри лучше не лезть без очень веской причины  smile 

PM MAIL   Вверх
asmdzen
Дата 19.10.2012, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: нет
Всего: 5



проблема в том что модули типа того что я описал (обьект который качает файлы) пишутся независимо от меня но примерно в одном контексте, получается я должен заранее определить как можно большее количество типов данных которые будут использоваться? например тот же модуль может вести статистику скорости скачивания, типа первая минута - скорость 1МБ/с, вторая 0.7МБ/с и т.д., я без понятия как отобразить такие данные.
PM MAIL   Вверх
xvr
Дата 19.10.2012, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(asmdzen @  19.10.2012,  11:43 Найти цитируемый пост)
 я без понятия как отобразить такие данные. 

Это таблица, можно отображать в виде таблицы либо в виде графика. Это уже View решать

Цитата(asmdzen @  19.10.2012,  11:43 Найти цитируемый пост)
получается я должен заранее определить как можно большее количество типов данных которые будут использоваться?

Их не так много, как может показаться. Думаю, что в набор - списки/деревья/таблицы все уложится

Данные лучше всего представлять не структурами, а экземплярами объектов - они могут передавать свои данные динамически, по мере генерации


Это сообщение отредактировал(а) xvr - 19.10.2012, 11:56
PM MAIL   Вверх
asmdzen
Дата 21.10.2012, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: нет
Всего: 5



а нельзя ли как-то связать модель и интерфейс? типа тот кто пишет модуль - должен еще в добавок или описать какие там данные используются и в каких целях, или написать модуль для графического интерфейса чтоб тот знал что и как отображать. А вообще, нельзя ли найти какой-нибудь проект в котором можно было бы посмотреть такую реализацию?
PM MAIL   Вверх
math64
Дата 22.10.2012, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Для того, чтобы связать модель и интерфейс, в Андроиде пишется Адаптер (это Java - но и для C++ принцип аналогичный).
В Qt аналог Андроидного Адаптера называется Делегат, но он менее гибкий - модель должна наследоваться от кутешного модельного класса.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.