Показать сообщение отдельно
Старый 09.01.2011, 08:15
JackFromChaos вне форума Посмотреть профиль Отправить личное сообщение для JackFromChaos Найти все сообщения от JackFromChaos
  № 49  
JackFromChaos
 
Аватар для JackFromChaos

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
Цитата:
Сообщение от Хомяк Посмотреть сообщение
. Дело не в "приверженности идеологии". А в том, что термины перестают отражать сущность понятия и это неправильно по-любому.
Таким образом мы пришли к тому, что здесь много людей считающих себя приверженцами MVC, но при этом таковыми не являются%)

Кстати, покрутив в голове MVC я таки решил попробовать поработать этом направлении Правда пока очень тяжело определяться какую именно часть функционала делать в контроллере...
Ну т.е. он однозначно интересен как управляющая/создающая/инициализирующая конструкция. В принципе у меня пока не возникает вопросов, что должно находится в моделе, а что - нет. Но вот какой функционал интерфейса(управления) должен находится внутри представления, а какой в контролере, пока не до конца понятно...

Кстати созрел вопрос. Допустим у нас есть активная модель, содержащие некоторые ноды с позициями. Скажем view эти ноды отображает как некоторые фигуры. У нас есть функционал drag&drop. Тут вроде как понятно. View обеспечивает некий полу-функционал drag&drop, отправляя новые позиции контролеру. Она меняет позиции в моделе, модель диспачит сообщение и view передвигает ноды.
Сообщение модель, вероятно, посылает в момент изменения свойства. Т.е. если контроллер делает нечто-вроде:
Код AS3:
modelNode.x=x;
modelNode.y=y;
То во view за одну команду придет 2 сообщения. View 2 раза "перересуется", что, как бы не хорошо.

Пример немного искусственный, но гипотетически - вполне реальный. Понятно, что можно сделать функцию у modelNode - setPosition. И что 2 сообщения и 2 присвоения координат спрайту не такие уж большие затраты.
Но данные могли быть и более разнородными, а обновление более затратным.
Конечно, можно во view реализовать отложенный invalidate, который взводится по событию от модели.
Но, если мы его реализуем в общем view, то нам придется обновить каждую ноду. Ну а если внутри представления ноды, то вроде бы и все нормально... Хотя тогда представление ноды становится куда более тяжеловесным. Хотя может и нормально(чет пока задавал вопрос, сам ответ выдумал.. но может есть еще какие то варианты?)...

Да, кстати в процессе разработки примера столкнулся с тем, что родительский view во время ручного драга, не получает mouseMove, так как сцену перекрывает нода которую мы тащим. А подписываться на mouseMove в каждой ноде - как то не комильфо... Я конечно выкрутился, подписавшись на stage, но это тоже как то не особо красиво. Можно где нить забыть отключить обработчик, и получить нежданчик, вернувшись во вью с нодами из какого нибудь другого режима... Может есть какое то более элегантное решение?
Только следует помнить, что во время данного драга мы не должны двигать объект, а только сообщать об этом контроллеру.
__________________
Искренне Ваш, Джек.


Последний раз редактировалось JackFromChaos; 09.01.2011 в 08:19.