Тема: Хорошее MVC
Показать сообщение отдельно
Старый 15.01.2012, 22:05
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 388  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Представление:

Берет из модели массив юнитов. Размещает их в дисплейлист. Она не знает на какие координаты их размещает. Координаты уже заранее предписаны каждому юниту во время их создания в контроллере. Но! она знает на какие глубины их размещать. Не важно откуда знает. Знает и все. Это ее дело заниматься сортировкой (удобным отображением), потому что именно она вызывает addChild-ы а не кто-то другой из триады.

Контроллер:

Получает известие от вьюшки что пользователь выбрал юнита, кликнул на карту и надо этот юнит переместить на место, куда кликнул пользователь. Контроллер лезет в массив юнитов (в модели) вытаскивает оттуда нужного юнита и говорит ему: "двигайся туда". Юнит покорно, при каждом шаге высчитывая новые координаты, двигается. То что он перемещается знает только он сам и юзер, который видит на экране перемещение. Когда юнит пришел на место - он сообщает конролеру, что тот прибыл. Контроллер знает что раз тот прибыл - значит положение изменилось и надо пересортировать карту. Что делать?
Бежим к модели - та курит в сторонке - ей вообще по барабану. Она знает что юнит никуда не делся из ее массива. Переместился? ну и что? Координаты можно узнать от самого юнита.
Так кто же должен сообщить вьюхе, которая понятия не имеет что произошло - что юнитов надо отсортировать?

Добавлено через 3 минуты
PS: повешать слушатель во вьшке на юнита мы не можем. Это может сделать только контроллер. Потому что вьюшка передает контроллеру что был произведен клик, а тот уже определяет с помощью сотен строк что дальше с ним делать (перемещать, атаковать, умирать) и отдает ему команды. Представление заранее не может знать что конкретный юнит будет перемещен.
__________________
Я мало чего умею, но зато хорошо умею учиться...