Код AS3:
dynamic class SexyModel extends Proxy implements IEventDispatcher{
// todo: implement IEventDispatcher
public function SexyModel() {
}
override flash_proxy function callProperty(methodName:*, ... args):* {
// скажем, меняем свойство если обращаемся так: sexyModel.setCustomers(customers), sexyModel.setWaitFlag, т.е. метод начинается на 'set'
// 1. проверяем подходит ли methodName под нашу маску (set*)
// 2. меняем своё свойство. Например, если такого свойства у нас нет – лучше кинуть RTE или хотя бы warn самостоятельно, т.к. класс dynamic и VM за тебя это не сделает
// т.к. язык типизированный, идиологически придётся сравнивать даже типы вручную.
// 3. диспатчим правильный эвент
}
override flash_proxy function getProperty(name:*):* {
// или вариант, что все свойства к модели будут обращаться через [], типа sexyModel[sexyProperty] = 'sexyValue'
}
override flash_proxy function setProperty(name:*, value:*):void {
// см. выше
}
}
Возможные проблемы:
1) "свои" методы модели, возможно, придётся разруливать через тот же callProperty. Вероятно любое обращение к свойствам идёт через это callProperty, поэтому это накладывает свои ограничения, но они решаемы. Я точно не знаю, на as давненько не писал ничего серьезного.
2) Скорее всего это медленно. Чаще всего это не будет никого волновать, но для "узких" мест может потребоваться "настоящий" инлайн-код и прочий тектоник вокруг этой модели. Use wisely.