Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.12.2013, 10:57
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 1  
Ответить с цитированием
Isfet

Регистрация: 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
Старый 04.12.2013, 11:40
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 2  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Isfet, зачем начинать новую тему когда тему МVС обсудили уже в нескольких сабжах?
У меня общая структура построена на основе объекта XML. Есть иерархия контейнеров - видов, в которые добавляются виджеты, классы которых описаны в коллекциях соответствующих нод. Заполнение контейнеров происходит по ID обходя соответствующие ноды. Сервер общается с моделью (логикой) и с видом с помощью контроллеров. Вид общается с моделью через сервер как в обычном веб сервисе. Вид с моделью (логикой) не общается напрямую. Для приема/передачи измененных сервером или видом моделей используется датапровайдеры INodeIn и INodeOut в виде XML нод для сервиса, модели(логики) и вида. Можно также гонять JSON. Это на любителя. Общение происходит посредством кастомных событий.

Добавлено через 14 минут
Отвечаю с пункта 4 все изменения происходят в хэндлерах контроллеров.
5. Определяется логикой работы.
6.Лично я ничего не передаю в конструкторах.

Старый 04.12.2013, 12:09
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 3  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
Цитата:
Сообщение от Babylon Посмотреть сообщение
Отвечаю с пункта 4 все изменения происходят в хэндлерах контроллеров.
тоесть контроллер подписывается на все мышиные события вью(Roll, mouseOver /out ) см.ниже код, а потом меняет модель? или сразу координаты объекта?
Код AS3:
public function Controller(...) {
     _view = new  View(model);
     host.addChild(_view);		
     _view.addEventListener(MouseEvent.CLICK, onClick);
}

Старый 04.12.2013, 12:31
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 4  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Если у вас клиент серверное приложение клиент пингует сервер. За интервал между пингами происходят изменения в системе клиент-сервер. Изменения вида "собираются" в NodeOut вида, а изменения сервера в NodeOut сервиса. Обновления происходят по наступлению событий в хэндлерах. Где у Вас хэндлер?

Старый 04.12.2013, 12:32
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
2. Mediator/Proxy
3. Да
4. Зависит от того, являются ли координаты данными, то есть интересуют ли эти координаты логику приложения, или логику интересуют только "логические" события (объект поменял хозяина, осуществлен драг-н-дроп объекта на другой объект, произошло столкновение и т.п.). Не перегружайте Модель бессмысленными данными и рассчетами, которые интересны только в контексте Вью. Различайте Данные Модели и просто свойства дисплей обжекта. Различайте события в контексте Вью и события в контексте Приложения/Игры. Например: Модель не должна заниматься анимацией Выпадающего Списка (Dropdown Menu). Ее интересует только выбор элемента списка пользователем (и то далеко не всегда). Положение мышки над списком и его высота в процессе "выпадания", как и события открытия и закрытия меню не должны интересовать Модель. Это не данные приложения.
5. Определяется логикой работы.
6. Если время является данными Модели, то есть необходимо для рассчетов в Логике. Если время нужно только как информация для сейва, нет смысла пихать его в Модель и множить связи.
__________________
Reality.getBounds(this);

Старый 04.12.2013, 12:48
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 6  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
Цитата:
Сообщение от Babylon Посмотреть сообщение
Где у Вас хэндлер?
ну в коде я имел ввиду хэндлер маусклика и не стал его писать

Цитата:
Сообщение от Wolsh Посмотреть сообщение
6. Если время является данными Модели, то есть необходимо для рассчетов в Логике. Если время нужно только как информация для сейва, нет смысла пихать его в Модель и множить связи.
Расстановка всех объектов меняется при каждом тике времени, и как я понял контроллер должен пробегаться по ним, так как там есть логика

Старый 04.12.2013, 12:59
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 7  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Контроллер не пробегается, а слушает события которые диспатчатся ему, когда вы что-то меняете.
В данном случае если клики относятся к виджетам - кнопкам, спискам и т.д. это не всегда интересно контроллеру приложения. Ему интересны те события на которые он подписан и которые вы ему сами диспатчите.

Старый 04.12.2013, 13:10
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 8  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
допустим, модель хранит несколько интервалов времени (начальная и конечная дата в миллисекундах), по этим
интервалам нарисованы Вьюшки, соответственно у нас система 1 контроллер и несколько моделей и столько же вью.
изменилась текущая дата(меняется она каждую минуту) , нужно проверить попадает ли текущая дата в какой-нибудь интервал , или нет.
Если попадает, то нарисовать в соответствующей вью - палку,которая будет символизировать текущее время, и изменять свое положение каждую минуту.

какова будет последовательность действий в этом примере?

Старый 04.12.2013, 13:33
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 9  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
при изменении данных(даты) диспатчите событие контроллеру, которое на него предварительно подписываете и обрабатываете в хэндлере

Добавлено через 17 минут
Контроллер это класс(ы) для слежения и обработки ВАШИХ событий


Последний раз редактировалось Babylon; 04.12.2013 в 13:44.
Старый 04.12.2013, 14:12
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 10  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
а в хендлере контроллера что писать? нужно найти модель, которая по дате соответствует текущему времени, и по той модели нужно найти вью, и в этом вью нужно нарисовать линию "текущего времени".
Как должен проходить поиск вью? Или тут контроллер вообще не при чем, а модель сама при получении текущей даты должна проверить все внутренние модели, и сделать так чтобы найденная модель продиспатчила - "рисуй линию", и её вью в хэндлере нарисовала линию.

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 14:32.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.