|
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
Несколько вопросов по MVC
начал делать большой проект на MVC, накопились некоторые вопросы реализации.
1.кто должен грузить данные с сервера, главная модель, или главный контроллер, через контроллер, который непосредственно грузит. Если модель, то на какой глубине можно это делать, грузит только главная модель? или модели "дети" тоже могут грузить. Если контроллер, то каким образом контроллер загрузчик передает данные главному контроллеру: диспатч костом эвент с джейсон объектом, или вызывает его публичные методы и передает туда JSON 2.Если структура контроллеров такова, что она делится на две ветки (два больших модуля), каким образом из контроллера одной ветки вызывать метод в контроллере в другой ветке? Вести эту команду (копипастом) через все контроллеры до главного, а далее в другую ветку, до нужного, или же дать этим контроллерам ссылки на друг-друга. 3. Если в модели и во вью много однотипных объектов, каким образом осуществлять между ними связь, ну тоесть как имея ссылку на вью, найти нужную модель. правильно ли так: вью хранит айди (или какой нибудь другой идентификатор, по которому его распознавать), а в модели ключевой массив моделей по этому идентификатору. 4. Каким образом допустим осуществляется drag объекта в общем случае: а. Модель хранит х и y объекта, контроллер их меняет, вью обновляется. б. Модели не важны х и y , и контроллер напрямую меняет их? или через set-метод, чтобы можно было добавить какую -нибудь проверку на столкновения? 5. Если в модели изменилось одно свойство из 10, диспатчить "изменилось такое то свойство" и изменять вью только по этому свойству, или же диспатчить постоянно "change" и полностью перерисовывать объект по всем свойствам. 6. нормально ли подписываться в конструкторе на события изменения различных параметров модели(допустим на изменение текущего времени), чтобы из всех вью найти тот в который нужно вставить палку текущего времени? 7. Допустим с сервера пришел массив объектов с данными , и по этим объектам нужно нарисовать DO, как это должно происходить: контроллер подписан на событие модели (о приходе с сервера массива) и в хендлере создает триады? или как то иначе? Прошу отвечать с пометкой пункта, отвечать только по теме, просто обычно темы про mvc заканчиваются многостраничным флудом, который сложен для понимания). P.S.: Прошу тему не удалять, там как нет смысла создавать отдельную тему для кждого вопроса, т.к за заголовок трудно выразить его суть, и за то что название не отображает сути) т.к суть тут - MVC... Последний раз редактировалось Isfet; 04.12.2013 в 12:18. Причина: f |
|
|||||
[+1 25.10.13]
[+4 18.03.14] |
Isfet, зачем начинать новую тему когда тему МVС обсудили уже в нескольких сабжах?
У меня общая структура построена на основе объекта XML. Есть иерархия контейнеров - видов, в которые добавляются виджеты, классы которых описаны в коллекциях соответствующих нод. Заполнение контейнеров происходит по ID обходя соответствующие ноды. Сервер общается с моделью (логикой) и с видом с помощью контроллеров. Вид общается с моделью через сервер как в обычном веб сервисе. Вид с моделью (логикой) не общается напрямую. Для приема/передачи измененных сервером или видом моделей используется датапровайдеры INodeIn и INodeOut в виде XML нод для сервиса, модели(логики) и вида. Можно также гонять JSON. Это на любителя. Общение происходит посредством кастомных событий. Добавлено через 14 минут Отвечаю с пункта 4 все изменения происходят в хэндлерах контроллеров. 5. Определяется логикой работы. 6.Лично я ничего не передаю в конструкторах. |
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
тоесть контроллер подписывается на все мышиные события вью(Roll, mouseOver /out ) см.ниже код, а потом меняет модель? или сразу координаты объекта?
|
|
|||||
[+1 25.10.13]
[+4 18.03.14] |
Если у вас клиент серверное приложение клиент пингует сервер. За интервал между пингами происходят изменения в системе клиент-сервер. Изменения вида "собираются" в NodeOut вида, а изменения сервера в NodeOut сервиса. Обновления происходят по наступлению событий в хэндлерах. Где у Вас хэндлер?
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
2. Mediator/Proxy
3. Да 4. Зависит от того, являются ли координаты данными, то есть интересуют ли эти координаты логику приложения, или логику интересуют только "логические" события (объект поменял хозяина, осуществлен драг-н-дроп объекта на другой объект, произошло столкновение и т.п.). Не перегружайте Модель бессмысленными данными и рассчетами, которые интересны только в контексте Вью. Различайте Данные Модели и просто свойства дисплей обжекта. Различайте события в контексте Вью и события в контексте Приложения/Игры. Например: Модель не должна заниматься анимацией Выпадающего Списка (Dropdown Menu). Ее интересует только выбор элемента списка пользователем (и то далеко не всегда). Положение мышки над списком и его высота в процессе "выпадания", как и события открытия и закрытия меню не должны интересовать Модель. Это не данные приложения. 5. Определяется логикой работы. 6. Если время является данными Модели, то есть необходимо для рассчетов в Логике. Если время нужно только как информация для сейва, нет смысла пихать его в Модель и множить связи.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
ну в коде я имел ввиду хэндлер маусклика и не стал его писать
Расстановка всех объектов меняется при каждом тике времени, и как я понял контроллер должен пробегаться по ним, так как там есть логика |
|
|||||
[+1 25.10.13]
[+4 18.03.14] |
Контроллер не пробегается, а слушает события которые диспатчатся ему, когда вы что-то меняете.
В данном случае если клики относятся к виджетам - кнопкам, спискам и т.д. это не всегда интересно контроллеру приложения. Ему интересны те события на которые он подписан и которые вы ему сами диспатчите. |
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
допустим, модель хранит несколько интервалов времени (начальная и конечная дата в миллисекундах), по этим
интервалам нарисованы Вьюшки, соответственно у нас система 1 контроллер и несколько моделей и столько же вью. изменилась текущая дата(меняется она каждую минуту) , нужно проверить попадает ли текущая дата в какой-нибудь интервал , или нет. Если попадает, то нарисовать в соответствующей вью - палку,которая будет символизировать текущее время, и изменять свое положение каждую минуту. какова будет последовательность действий в этом примере? |
|
|||||
[+1 25.10.13]
[+4 18.03.14] |
при изменении данных(даты) диспатчите событие контроллеру, которое на него предварительно подписываете и обрабатываете в хэндлере
Добавлено через 17 минут Контроллер это класс(ы) для слежения и обработки ВАШИХ событий Последний раз редактировалось Babylon; 04.12.2013 в 13:44. |
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
а в хендлере контроллера что писать? нужно найти модель, которая по дате соответствует текущему времени, и по той модели нужно найти вью, и в этом вью нужно нарисовать линию "текущего времени".
Как должен проходить поиск вью? Или тут контроллер вообще не при чем, а модель сама при получении текущей даты должна проверить все внутренние модели, и сделать так чтобы найденная модель продиспатчила - "рисуй линию", и её вью в хэндлере нарисовала линию. |
Часовой пояс GMT +4, время: 14:32. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|