Цитата:
Сообщение от Хомяк
 . Дело не в "приверженности идеологии". А в том, что термины перестают отражать сущность понятия и это неправильно по-любому.
|
Таким образом мы пришли к тому, что здесь много людей считающих себя приверженцами 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, но это тоже как то не особо красиво. Можно где нить забыть отключить обработчик, и получить нежданчик, вернувшись во вью с нодами из какого нибудь другого режима... Может есть какое то более элегантное решение?
Только следует помнить, что во время данного драга мы не должны двигать объект, а только сообщать об этом контроллеру.