10 советов по PureMVC

Бороздя то, что должен бороздить каждый флэшер и флексер, увидел пост товарища Йенса Краузе с 10 советами по работе с PureMVC (Рост, аууу!!!):

10 tips for working with PureMVC

1. Think in (Pure)MVC

Как я начала использовать PureMVC? Очень коротко: только начав думать на (Pure)MVC! Кто в танке, то PureMVC - это классическая модель "Model-View-Controller". Используя Фасад (Facade-pattern) вы напрямую не задействуете "актёров", но каждый отдельный член PureMVC имеет свою чёткую и определённую роль (более подробно о MVC во флэше можете ознакомиться у товарища fla_master прямо вот по этой ссылке):

- Proxies = Модель
- Mediator и его ViewComponents = Представление
- Commands = Контроллер

2. Create an API for View Components

View Component должен представлять собой стандартный UI-компонент (например DataGrid) и ни в коем разе не используйте публичные методы напрямую. Лучше всего создавать API.

Одно из хороших возможностей PureMVC - это нейтральность в отношении использующейся технологии. Ну, например, я создам "pure" флэш-приложение, основанное на PureMVC без использования flex-фреймуорка. Потом это приложение будет портировано в AIR-приложение. ViewComponents изменятся flex-фреймуорком, но не медиаторы (mediator) и другие "актёры" PureMVC.

3. Use one Mediator for multiple View Components

Для большей координации используйте только один медиатор (mediator) для View Component. Другими словами: не все Views нуждаются в медиаторе (mediator). Например, возьмём ApplicationControlBar содержащий TextInput и Button или ещё что. Затем создадим один медиатор (mediator) для ApplicationControlBar, обзовём его ApplicationControlBarMediator и сошлёмся на несуществующий компонент…

4. Let’s Events bubble up

Что случится, если вы не хотите использовать несколько View Components с медиатором (mediator)? Да ничего - используйте для контроля пользовательского интерактива с несколькими View Components пузырьковые эвенты уноследованные от "деток" View Component.

5. Communicate using Notifications as often as possible

Уведомления PureMVC - это "Events". Для коммуникации между ярусами дерева Модели, Представления и Контроллера используйте Notifications для всевозможных сценириев "communication from -> to":

- Mediator -> Proxy
- Proxy -> Mediator
- Proxy -> Command
- Commands -> Mediator

И по возможности забудьте, что есть возможность изменять Proxy (Модель) через Mediator (Представление) без использования Command (Контроллера)!

6. Use Commands / MacroCommands as often as possible

Commands выполняют всю работу на стороне Контроллера: получают и взаимодействуют с Проксями, взаимодействуют с Медиаторами (mediators) и выполняют команды. Если команда исползуется однажды или имеет пару строк кода - используйте её везде, где возможно - для этого вам необходимо только отправить Уведомление и всё! В будущем, это позволит расширить возможности Commands для более комплексных действий. И, это важно, всегда помните того "актёра", что может изменять Прокси (Модель)! Также, используйте MacroCommands для выполнения нескольких SubCommands.

7. Use Remote Proxy to send and receive server-side data

Для отправки и получения данных между уровнями приложения воспользуйтесь Проксями, называющимися "Remote Proxies". Это не специальные Прокси PureMVC, это такие же про Прокси, но призванные организовывать серверные вызоры типа HTTPServices, RemoteObjects или чего-то ещё подобного.

8. Remove unused Mediators

В некоторых ситуациях вы больше не будете использоваться Медиатор (mediator) и его View Components. Так удаляйте его к чертям используя facade.removeMediator(MyMediator.NAME); также воспользуйтесь методом destroy() чтобы убить ViewComponent  его listeners, timer, references и etc.

9. The Power of VO’s (Value Objects)

View Components нет нужды знать, что такое Фасад, и вообще что-либо о приложении PureMVC. Это означает, что View Components не имеет доступа к Модели и данным, которые она хранит. Для того, чтобы обойти это и всё же ссылаться на данные, испоьзуйте Value Objects (VO). VO - это не "актёр" ядра PureMVC, но обладают flex-примочкой "Data Binding", что делает эти объекты очень мощными - можно изменять данные, не нарушая правил.

10. Courseware available

Клифф Холл выполнил всю работу - вы найдёте великолепную документацию:  "Framework Overview", "Best Practices" и "Conceptual Diagram". Ну и конечно же полезные Courseware!

6 отзыва(ов) на “10 советов по PureMVC”

  1. — 27 Дек 2007 в 13:51 Flash is the Game

    Тут я! Продолжение цикла статей по PureMVC следует! Сразу после НГ :)

  2. — 27 Дек 2007 в 17:33 Flash is the Game

    Кстати, по существу этих десяти:

    5. Communicate using Notifications as often as possible

    Уведомления PureMVC - это “Events”. …

    В принципе, в таком кратком списке советов сравнение вполне уместное, но желающий вникнуть в PureMVC должен понять, что Notifications - это КАК “Events”, но не Events. Из этого следует несколько практических отличий в их использовании.

    Первое - это описанная во втором пункте независимость PureMVC от типа приложения — Flash, Flex или AIR.

    Второе — с нотификейшенами очень удобно передавать те самые VO’s, и для этого не нужно создавать доп. расширяющие классы (как в случае с Events).

    Я это буду подробно расписывать.

    Вообще - очень хорошая подборка советов, своеобразный чеклист для разработчика, уже использующего PureMVC.

  3. — 27 Дек 2007 в 18:26 576871

    Ну да, ты прав. Как эвенты.

  4. — 03 Янв 2008 в 12:30 sectore

    Hi Aleksey,

    thanks for your translation ;)

    -Jens [aka sectore]

    http://www.websector.de/blog/

  5. — 03 Янв 2008 в 15:54 576871

    Thank you, Jens! :)

  6. […] This post is translated into German: “10 Tips für das Arbeiten mit PureMVC”, into Russian: “10 советов по PureMVC”, into Chinese: PureMVC?????? and into French: “10 trucs pour d?velopper avec PureMVC”.Thanks a lot to Aleksey, duzengqiang and Eric for the translations into Russian, Chinese and French! […]

Trackback URI | RSS-фид для комментариев

Вот магическая форма для высказываний:

XHTML: разрешены следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>