До последнего момента я очень скептически относился ко всем существующим фреймворкам для Flex. Я, конечно, не уделял особого внимания изучениям подробностей Cairngorm или PureMVC, но тем не менее мне было известно их основное устройство. Например я презираю глобальную доступность View из любого места в коде проекта написанного с использованием Cairngorm. Так же, меня напрягло количество промежуточных классов PureMVC, от которых код разбухает как на дрожжах. Имеено по-этому я никогда ничем не пользовался кроме базовой компонентно-событийной системы Flex Framework.
Поддавшись на восторженые отзывы риа-гуру я решил разобратся что и к чему. Не надейтесь, я не собирась тут расписывать по-русски о модели работы Mate, я опишу лишь несколькими предложениями: это действительно круто и я отвечаю за свои слова.
Я считаю, успех Mate связан с тем, что это не портированый фреймворк, а написаный именно под Flex. Он использует основные (возможно и не очень правильные) принципы и особенности Flex фреймворка, такие как:
- наследование всех классов от EventDispatcher, которое позволяет использовать bubbling-события, как основные носители сообщений между View, Model и прочими сущностями;
- довольно идентичную особенность биндинга, с помощью которой Mate наладило ненавязчивый IOC (Inversion of Controls);
- разметку mxml для описания деклараций связующих механизмов приложения в простой и понятной форме.
И все это работает поверх сущностей вашего приложения, без необходимости наследования утомляющих абстрактных классов команд, медиаторов, моделей и пр. Ну и на десерт, Mate фреймворк отлично расширяется путем наследования ваших дополнений от базовых управляющих классов.
В общем, листая документацию сайта, можно получить первое впечатление не более чем за час. Просмотр исходного кода подтвердает подозрения, что авторы проекта — отличные профессионалы, которые обернули нюансы Flex в бонусы. Нужно пользоваться!
Авторы проекта еще и не лишены чувства юмора и самокритики, что тоже радует:
http://code.google.com/p/mate-framework/source/browse/trunk/src/com/asfusion/mate/core/Creator.as
Супер-метод createInstance :)
Да, весело. Если бы они знали наверняка какой тип приходит в параметре
template, можно было бы добавить ему метод типаinitialize(... args). И вызывать как-то так: