Доброго дня.
В энтерпрайзе решили начать проект на RL2 и собственно такой вопрос. Можно ли создавать медиатор без привязки к к клипу?
Конкретно пример: У меня есть несколько планет, на каждой из планет "живу" здания\персонажи...
В каждый момент времени мне нужно отображать на экране только одну планету, в остальное время мне не нужны клипы для всех персонажей на всех планетах. Но при этом мне нужно что бы они существовали внутри контекста, ловили сообщения.
В домашнем проекте я применял такую структуру:
// Любой объект на поверхности планеты.
interface IPlanetActor {
function register();
}
// например персонаж, который бегает по планете
// По всем признакам он является медиатором: В него инжектятся модели и сигналы,
// в момент регистрации он подписывается на сигналы и начинает взаимодействовать с окружением,
// до тех пор пока не "решит удалиться", вызвав kill().
class Character implements IPlanetActor {
[inject] // какие-то зависимости
// рассылается при добавлении\удалении в мир
[inject] public var signalCharacterAdded: SignalCharacterAdded;
[inject] public var signalCharacterRemoved: SignalCharacterRemoved;
// ловит что бы удалиться вместе с планетой
[inject] public var signalPlanetRemoved: SignalPlanetRemoved;
public function register() {
// Подписываемся на сигналы
signalCharacterAdded.dispatch(this);
}
protected function kill() { //вызывется по желанию самого персонажа или при получении SignalPlanetRemoved
// удаляем подписи на сигналы
signalCharacterRemoved.dispatch(this);
}
}
class Planet {
[inject] public var injector: Injector;
// рассылает при уничтожении планеты
[inject] public var signalPlanetRemoved: SignalPlanetRemoved;
[inject] public var signalCharacterAdded: SignalCharacterAdded;
[inject] public var signalCharacterRemoved: SignalCharacterRemoved;
private var charactersList: Vector.<Character>; // < заполняется на основании signalCharacterAdded, signalCharacterRemoved
public function registerPlanetActor(actor: IPlanetActor): void {
injector.injectInto(actor);
actor.register();
}
}
В момент выбора планеты, я уже создаю вьюху поверхности, запрашиваю список персонажей, на их основе создаются CharacterView+CharacterMeadiator, которые повторяют все за Character.
Но не уверен что такой подход правильный с точки зрения Rl2. Для домашнего проекта меня это полностью устраивает, но тащить ли такое в продакшен?