![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 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'ов как-то? В общем помогите кто чем может ) |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Для того, что бы ваш View мог показать что то из Model, они должны 'говорить на одном языке' - View не смодет показать то, чего не понимает. Так что это ваша задача этот язык обеспечить.
Можно ввести набор предопределенных структур данных, которыми могут обмениваться части MVC. Ваш набор полей - это один из видов структуры обмена данными (назовем ее - PropertySet к примеру). Еще бывают списки, деревья и таблицы. Возможно могут быть и более изощренные структуры данных. В любом случае вам надо определиться с этим набором до того как вы начнете писать компоненты MVC Правда есть варианты с динамически создаваемыми типами данных, но в такие дебри лучше не лезть без очень веской причины |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: нет Всего: 5 |
проблема в том что модули типа того что я описал (обьект который качает файлы) пишутся независимо от меня но примерно в одном контексте, получается я должен заранее определить как можно большее количество типов данных которые будут использоваться? например тот же модуль может вести статистику скорости скачивания, типа первая минута - скорость 1МБ/с, вторая 0.7МБ/с и т.д., я без понятия как отобразить такие данные.
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Это таблица, можно отображать в виде таблицы либо в виде графика. Это уже View решать
Их не так много, как может показаться. Думаю, что в набор - списки/деревья/таблицы все уложится Данные лучше всего представлять не структурами, а экземплярами объектов - они могут передавать свои данные динамически, по мере генерации Это сообщение отредактировал(а) xvr - 19.10.2012, 11:56 |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: нет Всего: 5 |
а нельзя ли как-то связать модель и интерфейс? типа тот кто пишет модуль - должен еще в добавок или описать какие там данные используются и в каких целях, или написать модуль для графического интерфейса чтоб тот знал что и как отображать. А вообще, нельзя ли найти какой-нибудь проект в котором можно было бы посмотреть такую реализацию?
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Для того, чтобы связать модель и интерфейс, в Андроиде пишется Адаптер (это Java - но и для C++ принцип аналогичный).
В Qt аналог Андроидного Адаптера называется Делегат, но он менее гибкий - модель должна наследоваться от кутешного модельного класса. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |