Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   PureMVC Медиаторы (http://www.flasher.ru/forum/showthread.php?t=202894)

namespaces 17.08.2013 20:23

PureMVC Медиаторы
 
Начал учить PureMVC и походу возникли некоторые вопросы.
Правильно ли пихать все Медиаторы в главный Медиатор приложения, регистрируя их и оповещать все вместе?
Если будут компоненты 20-30 шт. скажем, разумно ли все это обрабатывать в одном классе?
Что то мне трудно дается отношение между Медиатором и всей системы(

alatar 18.08.2013 11:55

Медиатор служит прослойкой между его видом и приложением. Он знает какие события генерирует вид, как преобразовать их для приложения и как оповестить приложение о событии, а также получает ссылку на модель для своего вида. Для однотипных видов, медиаторы могут быть также однотипны. Но, в любом случае, для каждого экземпляра вида, создается отдельный экземпляр соответствующего ему медиатора.

namespaces 18.08.2013 23:25

Я это знаю)
Вопрос был - правильно ли разместить (регистрировать) все другие медиаторы в один главный Медиатор?
То есть управлять только через главный Медиатор.
Примерно так:

Код AS1/AS2:

public function MainMediator()
                {
                        super(NAME);
 
                        facade.registerMediator( new IndexPage().show);
                        facade.registerMediator( new HomePage().show);
                        facade.registerMediator( new NavPage().show);
                        facade.registerMediator( new AboutPage().hide);
                        facade.registerMediator( new ServicePage().hide);
                        facade.registerMediator( new PortfolioPage().hide);
                        facade.registerMediator( new ContactPage().hide);
                }


alatar 19.08.2013 00:12

Нет неправильно. Даже если закрыть глаза, на то что так (new IndexPage().show о_О) регистрировать медиаторы даже по меркам pureMVC неправильно.

namespaces 19.08.2013 01:09

А как по вашему должно быть правильно? Пожалуйста дайте мне хоть какой то совет, я уже голову переломал над этой архитектурой.
На данный момент мой код делает одно, все компоненты обрабатывает свой медиатор, главный медиатор получает ссылки на все остальные медиаторы и слушает события от всех.
С главного медиатора я могу воздействовать на публичные свойства, методы других медиаторов. Мне этот вариант показался удобным.

PainKiller 19.08.2013 17:01

Я давно уже не работал с pureMVC, однако открыв свои старые исходники я обнаружил, что я так и делал, регистрировал медиатры в главном. Насколько я помню, в документации, тьюториалах, и тех примерах приложений на pureMVC, которые мне удалось найти в инете, так и делалось, поэтому мне интересно послушать, почему это неправильно :-) Еще попадался вариант где медиатры регистрировались в командах, но не знаю лучше это или нет. И да, pureMVC здесь не любят, поэтому ожидаю советы типа "вообще не следует работать с этим г..м", но надеюсь что хоть что то по существу будет сказано).

alatar 19.08.2013 21:45

PainKiller, ожидаемые ответы у вас правильные, pureMVC на редкость корявое решение в рамках as3 и flash platform. Я тоже уже не работал с ним лет пять.

По существу. Если вы заметили, то в этих примерах в медиаторе главного вида регистрируются медиаторы для видов, которые являются частями главного вида и уже находятся в списке отображения. Такой подход накладывает некоторые ограничения на переконфигурирование приложения, вам уже недостаточно поменять контроллер (команды инициализации главного вида и добавления новых видов в список отображения), но придется еще и править медиаторы.

Увы, я не нашел официального примера с приложением в котором виды создавались бы не все сразу при старте приложения.

Цитата:

А как по вашему должно быть правильно?
У вас медиаторы создают виды?

Цитата:

С главного медиатора я могу воздействовать на публичные свойства, методы других медиаторов.
Зачем им вообще дополнительные публичные свойства? Для взаимодействования частей приложения в pureMVC есть уведомления (notifications). Медиаторы вообще не должны знать о других медиаторах.

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

namespaces 20.08.2013 00:47

Цитата:

Сообщение от alatar (Сообщение 1144215)
У вас медиаторы создают виды?

Неа. Медиаторы играют роль посредника между компонентом и контроллером.
Я так понял вы имеете ввиду, не инициализировать все медиаторы одновременно без надобности или на каждый медиатор повесить свою команду (контроллер)?

Цитата:

Зачем им вообще дополнительные публичные свойства? Для взаимодействования частей приложения в pureMVC есть уведомления (notifications). Медиаторы вообще не должны знать о других медиаторах.
Да вы правы. Я иногда вообще забываю про внутреннее уведомление фреймворка и посылаю-получаю штатным способом.

alatar 20.08.2013 02:32

Нет вида на экране == нет медиатора. Команда, по событию, создает и добавляет вид на экран и регистрирует его медиатор и удаляет предыдущий вид и его медиатор, если в них уже нетнадобности.

PainKiller 20.08.2013 10:33

alatar, спасибо за ответ.
Цитата:

Да вы правы. Я иногда вообще забываю про внутреннее уведомление фреймворка и посылаю-получаю штатным способом.
Вот это вообще зря, теряется смысл использования фреймворка. Его минусы использования как раз в том и заключаются, что на каждый чих приходится создавать кучу классов (вьюху, медиатор, команду + возможно что то еще) - это не всегда оправдано.


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

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