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

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

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

Регистрация: Feb 2012
Сообщений: 212
По умолчанию Отделение логики от отображения.

Здравствуйте, задумал сделать независимый класс World и класс View отвечающий за отображение его содержимого. Ко всему прочему, в целях экономии ресурсов и облегчения возможного последующего портирования на другие языки, мною было принято решение отказаться от использования AS3 событий в классе World. Все шло просто прекрасно, но я столкнулся с затруднениями пытаясь заставить класс View реагировать на происходящее в World. Содержимое World представлено объектами, хранящимися в массиве, View на основе этого массива создает для каждого объекта World DO и помещает его на сцену. Не понятно только как сделать, что бы при добавлении/удалении из массива World объектов View узнавал об этом и соответственно добавлял и удалял со сцены необходимые DO. Очень не хочется заставлять World заботиться о нуждах кого бы то ни было. Есть ли у кого нибудь соображения на этот счет?

Старый 30.05.2012, 01:28
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 2  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Чем-то мне ваш метод напоминает шаблон Facade, синглтон что-ли?

Цитата:
Не понятно только как сделать, что бы при добавлении/удалении из массива World объектов View узнавал об этом
Зря вы отказались от событий, было бы проще и красивее.

Вы можете сделать во view какой-нибудь setter, в который будете пихать свой массив при обновлении.
Соответственно view должен на это реагировать перерисовкой
__________________
adobe AS3 manual

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
MVC-то чем не пришелся?)))
__________________
Reality.getBounds(this);

Старый 30.05.2012, 01:39
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 4  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
тоже думал спросить, чем фреймверки не подошли.

Но раз человек даже от событий отказывается, то куда тут уж фреймверки
__________________
adobe AS3 manual

Старый 30.05.2012, 01:46
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 5  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
strangedk, подозреваю, что Wolsh говорил не фреймворке.
__________________
Поймай яблоко 2!

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

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Странно, что вы именно EventDispatcher выбрали как осложнение для портирования на другие языки, реализация этого класса на других языках не такая уж и трудоемкая задача по сути. Ничего в нем магического вроде нет.

Старый 30.05.2012, 03:43
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 7  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
По умолчанию NSNotificationCenter

В принципе, если вам нужно своё решение, можете использовать самописный аналог эплового (NSNotificationCenter). Через него можно диспачить что угодно, в том числе изменение представления и модели.

Если нужно - есть моя реализация этой штуки на джаве, переделаете с минимальными изменениями.

Старый 10.06.2012, 22:26
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 8  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
Решил все же оставить события. Логика диспатчит, а отображение слушает. Потеря производительности - минимальная, удобство - максимальное Хотя, необходимость добавлять в код логики, код для отображения все равно огорчает.
Столкнулся с другой проблемой:
View помещает на сцену DO в зависимости от типа объектов в World Т.е. нужно как то отличать мяч от коробки и подгружать для каждого объекта соответствующее ему изображение. Может ли кто нибудь предложить, что нибудь кроме свойств-идентификаторов у объектов и switch в отображении?

Старый 10.06.2012, 22:30
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 9  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от PlutDem Посмотреть сообщение
необходимость добавлять в код логики код для отображения все равно огорчает
Меня это больше удивляет.
__________________
Поймай яблоко 2!

Старый 11.06.2012, 01:06
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 10  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
View помещает на сцену DO в зависимости от типа объектов в World Т.е. нужно как то отличать мяч от коробки и подгружать для каждого объекта соответствующее ему изображение. Может ли кто нибудь предложить, что нибудь кроме свойств-идентификаторов у объектов и switch в отображении?
Я когда давно делал редактор мебели еще на as2 решил сильно не заморачиваться и впихнуть фабрику вьюшек в модель, это выглядело бы в as3 так:
Код AS3:
public class ConcreteItem extends ItemBase
{
    ....
    override public function newView():ViewBase
    {
         return new ConcreteView(this);
     }
 
    override public funtion getIsoView():IsoViewBase
    {
         return new ConcreteIsoView(this);
    }
}
Спрашивается: зачем тогда вообще разделять модель и вид? - А у меня 2 вида было - один изометрический - другой - вид сверху. Чтобы логику не копипастить и в 2-х местах не обновлять.
А ведь один вид может сейчас быть - а в другой не быть - т.е. не получается на виде данные хранить (и на каком из 2-х? - они оба исчезают периодически).
Да и разобраться в логике, не обременённой видом проще.

Хотя, конечно, в классическом MVC модель ничего не должна знать о виде. Но, это практика - какой подход оптимален - тот и надо использовать, а не думать как там правильно блогеры советуют (они сами могут много об абстракции рассуждать, а строчить код, на 50% состоящий из синглтонов - рассказывать то всякое можно )

Если фабрику/тип объекта в логику не пихать, то альтернативой свитчу может быть карта/хеш-таблица "тип модели" - "фабрика вьюшки/тип вьюшки"
Впринципе, можно и свитчём - главное, чобы он в одном месте был, а не 10 похожих по всему коду (Если его удастся сделать одним - то в принципе получится то же самое, что и с хеш-таблицой)

P.S. Стало интересно код посмотреть - а то на словах можно такого насоветовать


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

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

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


 


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


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