Передать прокси в загруженный модуль в приложении PureMVC MultiCore? - PullRequest
1 голос
/ 24 октября 2011

Я создаю флэш-кампанию, которая будет загружена в клиентскую среду, которую я не могу контролировать. Фреймворк уже загрузит несколько вещей, таких как локаль, шрифты и копии, и передаст эти вещи моему swf после инициализации.

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

Оболочка и кампания будут модулями PureMVC. Оболочка создаст несколько прокси-серверов и заполнит их данными, переданными из фреймворка (константы локали, шрифты и т. Д.), Перед загрузкой в ​​кампанию.

Когда кампания загружена, ей также потребуются локаль, шрифты и т. Д., Поэтому мой вопрос: как лучше всего передать эти данные в модуль кампании из модуля оболочки?

  • Я мог бы создать те же прокси в модуле кампании и снова загрузить данные, которые будут кэшироваться, но это, очевидно, неверный путь.

  • Я исследовал использование утилиты pipe, но в моем случае это кажется излишним, поскольку связь будет односторонней и произойдет только один раз во время инициализации кампании.

  • Было бы нормально с точки зрения шаблона проектирования передать прокси в метод init модуля кампании, а затем зарегистрировать эти прокси в команде запуска модуля кампании? Это кажется неправильным, так как эти прокси имеют ссылки на мой фасад приложения оболочки через имена уведомлений. Было бы хорошо, если бы я переместил имена уведомлений в какой-то класс "NotificationConstants", который могут использовать оба модуля?

  • Я мог бы создать аналогичные прокси в модуле кампании, но на этот раз заполнить их объектами данных из моих старых прокси, переданных ранее упомянутому методу init? Спонтанно это выглядит как лучший способ сделать это, поскольку объекты данных не имеют никаких ссылок на мой модуль оболочки, но "старые" прокси имеют это ..

1 Ответ

2 голосов
/ 24 октября 2011

Решение, которое я обычно использую, заключается в создании интерфейса:

interface Campaign {
    function set campaignDetails(value:CampaignDetails):void;

    //...
}

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

Когда оболочка готова с загрузкой модуля, она просто должна:

if (module is Campaign)
{
    (module as Campaign).campaignDetails = ...;
}

Я уверен, что ничего нового не скажу,Вам просто нужно сохранить знакомство между оболочкой и модулем только на уровне интерфейса.Затем вы просто передаете данные и оставляете ядро ​​MVC модуля для работы с ним независимо от оболочки.

...