|
|
|||||
Регистрация: Feb 2012
Сообщений: 212
|
Отделение логики от отображения.
Здравствуйте, задумал сделать независимый класс World и класс View отвечающий за отображение его содержимого. Ко всему прочему, в целях экономии ресурсов и облегчения возможного последующего портирования на другие языки, мною было принято решение отказаться от использования AS3 событий в классе World. Все шло просто прекрасно, но я столкнулся с затруднениями пытаясь заставить класс View реагировать на происходящее в World. Содержимое World представлено объектами, хранящимися в массиве, View на основе этого массива создает для каждого объекта World DO и помещает его на сцену. Не понятно только как сделать, что бы при добавлении/удалении из массива World объектов View узнавал об этом и соответственно добавлял и удалял со сцены необходимые DO. Очень не хочется заставлять World заботиться о нуждах кого бы то ни было. Есть ли у кого нибудь соображения на этот счет?
|
|
|||||
Чем-то мне ваш метод напоминает шаблон Facade, синглтон что-ли?
Цитата:
Вы можете сделать во view какой-нибудь setter, в который будете пихать свой массив при обновлении. Соответственно view должен на это реагировать перерисовкой
__________________
adobe AS3 manual |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
MVC-то чем не пришелся?)))
__________________
Reality.getBounds(this); |
|
|||||
тоже думал спросить, чем фреймверки не подошли.
Но раз человек даже от событий отказывается, то куда тут уж фреймверки
__________________
adobe AS3 manual |
|
|||||
Lorem ipsum
|
strangedk, подозреваю, что Wolsh говорил не фреймворке.
__________________
Поймай яблоко 2! |
|
|||||
Странно, что вы именно EventDispatcher выбрали как осложнение для портирования на другие языки, реализация этого класса на других языках не такая уж и трудоемкая задача по сути. Ничего в нем магического вроде нет.
|
|
|||||
Регистрация: Mar 2010
Сообщений: 137
|
NSNotificationCenter
В принципе, если вам нужно своё решение, можете использовать самописный аналог эплового (NSNotificationCenter). Через него можно диспачить что угодно, в том числе изменение представления и модели.
Если нужно - есть моя реализация этой штуки на джаве, переделаете с минимальными изменениями. |
|
|||||
Регистрация: Feb 2012
Сообщений: 212
|
Решил все же оставить события. Логика диспатчит, а отображение слушает. Потеря производительности - минимальная, удобство - максимальное Хотя, необходимость добавлять в код логики, код для отображения все равно огорчает.
Столкнулся с другой проблемой: View помещает на сцену DO в зависимости от типа объектов в World Т.е. нужно как то отличать мяч от коробки и подгружать для каждого объекта соответствующее ему изображение. Может ли кто нибудь предложить, что нибудь кроме свойств-идентификаторов у объектов и switch в отображении? |
|
|||||
Lorem ipsum
|
Меня это больше удивляет.
__________________
Поймай яблоко 2! |
|
|||||
Цитата:
public class ConcreteItem extends ItemBase { .... override public function newView():ViewBase { return new ConcreteView(this); } override public funtion getIsoView():IsoViewBase { return new ConcreteIsoView(this); } } А ведь один вид может сейчас быть - а в другой не быть - т.е. не получается на виде данные хранить (и на каком из 2-х? - они оба исчезают периодически). Да и разобраться в логике, не обременённой видом проще. Хотя, конечно, в классическом MVC модель ничего не должна знать о виде. Но, это практика - какой подход оптимален - тот и надо использовать, а не думать как там правильно блогеры советуют (они сами могут много об абстракции рассуждать, а строчить код, на 50% состоящий из синглтонов - рассказывать то всякое можно ) Если фабрику/тип объекта в логику не пихать, то альтернативой свитчу может быть карта/хеш-таблица "тип модели" - "фабрика вьюшки/тип вьюшки" Впринципе, можно и свитчём - главное, чобы он в одном месте был, а не 10 похожих по всему коду (Если его удастся сделать одним - то в принципе получится то же самое, что и с хеш-таблицой) P.S. Стало интересно код посмотреть - а то на словах можно такого насоветовать Последний раз редактировалось expl; 11.06.2012 в 01:23. |
Часовой пояс GMT +4, время: 19:32. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|