Flash Ripper RSS Readers

Метапрограммирование во Flex при помощи метаданных

Документация по Flex утверждает, что метаданные используются во Flex-приложениях для указания компилятору и парсеру дополнительных параметров классов, их свойств или методов. Например, в коде AS3-класса можно указать его события с помощью мета-тэгов [Event] (пример). После этого компилятор и парсер кода начинают "понимать" указанные события и при использовании данного AS3-класса в качестве MXML-компонента среда разработки Flex Builder будет выдавать к нему соотвествующие подсказки кода. А указав для свойства класса мета-тэг [Inspectable], вы сделаете его доступным инспектору свойств компонента (панель "Flex Properties"). Это встроенные мета-тэги, вот их полный список: Metadata tags in Flex 3. Присказка закончилась, дальше идет сказка.

Использование собственных мета-данных в AcationScript-классах

Со времен Flex 2 во Flash Player API встроена возможность получать доступ к мета-данным классов во время выполнения через т.н. Reflection API (метод describeType()). Это недокументированная возможность, поскольку документация говорит только об использовании мета-данных компилятором.

Более того, можно не только получить доступ к встроенным метаданным в время выполнения, но и вводить собственные мета-данные, не предусмотренные разработчиками Flex Framework. А чтобы они вместе со встроенными мета-данными попали в откомпилированное приложение, нужно указать их в опции компилятора -keep-as3-metadata.

Примеры использования собственных метаданных во Flex

Открываются возможности, осознать которые — целая отдельная задача. Есть примеры. Вот Кристоф Конрац показывает, как упростить общение с базой данных. С помощью собственных мета-данных он описывает структуру таблицы БД в своем ActionScript-классе. Затем показывает, как просто можно работать с описанной в мета-данных таблицей БД, не используя никакого SQL — только ActionScript.

Вот более свежие примеры от Эли Гринфилда, демонстрирующие, как с помощью собственных мета-данных можно вызывать функцию при каждом изменении некоего AS-выражения, или как создавать одно- и дву-направленные связывания между частями вашего компонента, или как в декларативном стиле назначить обработчик события части вашего компонента (online demo).

И Кристоф, и Эли предоставляют исходники к своим экспериментам (не очень сложные).

Писал Rost, 21 Февраль 2008 14:26

Найдены баги:

Уже применяем давно это все :)

etc - 21 Февраль 2008 17:15

С вами, молодой человек, вопрос ясен :)

Рост - 21 Февраль 2008 17:18

Что-то настораживает всё это - особенно ввод собственных метаданных.
Пахнет очередным уходом от основных стандартов программирования и хаками.
На сколько оправдано использование таких методов?
Ведь эти задачи можно решить документированными методами?
За словами "упростить" и "просто" могут скрываться совсем не простые проблемы.

Racer - 21 Февраль 2008 17:18

Racer, радует только то, что только самые умные и отважные девелоперы смогут накосячить в этой области, поскольку осилить саму эту инфу, на мой взгляд, не очень просто. Фильтр такой :)

Рост - 21 Февраль 2008 17:45

Говорят, хорошо то, что работает.
Может так получиться, что такие вещи будет использоваться только новичками, причём только для того, чтобы показать свою крутость.

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

Сегодня мы радуемся таким методам, а завтра у будем вынуждены покупать новые ПК просто потому, что молодёж так пишет программы.

Алексей - 21 Февраль 2008 19:54

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

Рост - 21 Февраль 2008 19:57

>Пахнет очередным уходом от основных стандартов программирования и хаками.
аннотации не есть хак - это еще один инструмент в руках разработчика. сама возможность их использования только добавляет плюс actionscript'у :)

лоука - 22 Февраль 2008 0:05

"С помощью собственных мета-данных он описывает структуру таблицы БД..."

очень неправильный подход!

yoyo - 22 Февраль 2008 11:42

> очень неправильный подход!

Хм...
Значит Hibernate весь насквозь неправильный? :)

Dan - 22 Февраль 2008 14:55

Выходит так :)

Racer - 22 Февраль 2008 21:04

Мета-разработка есть и в UML. Вот только это добавляет проблем, даже знатокам объектного проектирования.
В последние годы приставка "мета-" очень сильно затёрлась, и не редко используется как нечто попсовое, привлекающее внимание.

Не редко, для решения сложнейших задач используются простейшие ходы.

Алексей - 22 Февраль 2008 21:38

Не редко, для решения сложнейших задач используются простейшие ходы.

Абсолютно справедливо - из маленьких кирпичиков строятся огромные дома.

Но тут, дело не в простоте - тут это как раз преподносится как нечто еще более упрощающее - а в том, что логику кода начинают заменять различного рода вставками, загрязняя сам язык. Если, к примеру краткий код типа ...?...:... еще можно как-то простить, так как заменяет он лишь малые операции, то когда целые логические блоки превращают в еле понятную строку - хз.
Всё это мета-кодирование, просто побочное явление Flex-фреймворка, и присуще только ему.

Но у нас есть выбор - пользовать и не пользовать. И это превосходно. А мода пройдет, а истинная логика останется вечно :). Ибо ведь пришли же мы от безтипового AS1 к строготипизированному AS3, хотя, казалось бы, общие тенденции современного программирования обратны.

Racer - 22 Февраль 2008 22:08

2Dan
hibernate, если он на сервере - правильный.
вы же не будете его использовать в java апплетах...

Неправильный он во флеше - потому что флеш - это клиент. А клиент не должен решать где-что хранить, это забота сервера, который отвечает за правильность бизнес-логики.

yoyo - 22 Февраль 2008 22:41

Там речь идёт об AIR-приложении. И исключительно в качестве примера (скорее всего - специально для тех, кто привык к анотациям именно в том виде, в котором они применяются в Hibernate).

Не исключено, что в будущем какие-то AIR-приложения (локальные, не предназначенные для работы с удалённым сервером) будут исплользовать локальную СУБД для хранения своих данных.

Другой пример - аналог MySqlAdmin на AIR. Тут тоже вполне можно иметь прямой доступ к СУБД, а не говородить ещё одну прослойку.

Да даже если взять клиент-серверное приложение. Например, форум.
Клиент говорит серверу: а покажи-ка мне 20 сообщений из топика с id=1234.
Не через SQL-запрос, а скажем вызовом метода через AMF.
А сервер уже формирует SQL-запрос, отправляет его СУБД, получает ответ в табличной форме и возвращает его клиенту именно в таком виде, т.е. совокупностью строк и полей.
Клиент получает результат и преобразует в массив объектов.
Вот тут метаданные (aka аннотации) очень помогут, чтобы быстро связать поле объекта и поле таблицы (а точнее - поле результата запроса).

Dan - 24 Февраль 2008 16:08

*говородить = городить :)

Dan - 24 Февраль 2008 16:10

Короче убедил. Применительно к Flex-разработке важная фича. Но осторожность (скорее, разумный подход к использованию) не помешает.
Вот еще бы документировали. Видимо, это как раз из тех скрытых возможностей, которые специально приоткрывают, чтобы народ попробовал, и если попрет - документируют.

Racer - 24 Февраль 2008 21:13

2Dan
Если декстоп, то да, конечно...
Кстати, уже сейчас, AIR-приложения обеспечены sqlite драйвером...

По поводу сервера (SQL --> AMF) - готов с вами поспорить...
Если даже ограничить видимость объектов и разграничить права (кстати, будете парсить SQL???), а что если злобный посетитель отправит очень ресурсоемкие запросы и с большой частотой?
Понимаю, это нежелание программировать backend, но что тогда случится с нашим супернадежным сервисом?

yoyo - 26 Февраль 2008 8:43

2Иванов С.А.
Эээ, брат...так альфаканал не работает ( думаю, надо:
1) либо ловить WM_PAINT, WM_NC_PAINT и там уже накладывать на задний план
2) либо как-то ATL контейнер научить это делать

yoyo - 29 Февраль 2008 10:44

299$ берут не за то, что вы написали, а за возможность
загрузить swf из ресурсов приложения, если грузить из файла,
то в ваш код можно упростить минимум на 7 строк - они здесь лишние,
просто указав вместо имени окна
путь к swf файлу.

Иванов С.А. - 15 Март 2008 9:02

это я про http://www.f-in-box.com

Иванов С.А. - 15 Март 2008 9:04



Это запись из категории 'Flex'. 10 еще cвежих:

Архивы по категориям:

3D-18, Adobe AIR-30, Animation-1, Apache Ant-1, Architecture-1, ARP-1, Art-25, Articles-26, AS3-52, Books-7, Business-3, Cairngorm-2, CI-1, Classes-10, Coding-30, Community-113, Components-19, Contests-28, Cool-Job-5, Debug-18, Design-26, Development-84, EMO-1, Events-13, Extensions-2, FAQ-8, FDS-1, Flash and html-5, Flash Player-35, Flash Updates-8, Flash-scene-1, flash10-4, FlashLite-2, Flex-30, Flex 2-80, Flickr-1, FMS-1, FPUG-46, frameworks-1, Games-11, Good Job!-35, HaXe-14, Health-2, Humor-10, Ideas-13, JavaScript-1, Job-26, JSFL-8, Links-2, Linux-1, Maps-1, Math-8, Money-11, MXML-1, Open Source-15, Optimization-2, Patterns-2, Personalities-27, Politics-1, Preloading-3, Productivity-9, PureMVC-10, Pv3d-1, Rafpug-4, Red5-3, Remoting-11, Resources-21, Ruby-6, SAAS-1, Security-11, SEO-8, Silverlight-5, Sound-3, Strategy-120, Tamarin-1, Tools-113, Training-2, Trash-8, URAFPUG-13, Urgent-1, Usability-6, Video-6, VoIP-5, Wallop-1, Wishlist-2, Архив всех записей (большой)

За последние месяцы:

Июл 2008: Международная встреча разработчиков URAFPUG завершена, URAFPUG - трансляция студии Flex-фреймворка Mate, весь Июл

Июн 2008: Попытка предварительных выводов о встрече аниматоров, Онлайн трансляция встречи аниматоров в Донецке, весь Июн

Май 2008: Если 3D, то по-взрослому: официальный запрос в Adobe по поводу контроля над мип-маппингом. Нужна ваша поддержка!, В этом году «Russian Flash Awards» пройдет в «космическом стиле», весь Май

Апр 2008: Программирование под флэш платформу. Cтатья (местами спорная), Advanced Flash Components бесплатно раздает все свои AS2-компоненты, весь Апр

Мар 2008: Зарплаты программистов в 2007 году, FlashPhone как технология года? Технология года? В Рунете?, весь Мар

Фев 2008: ЙА ФПУГ — регистрация на первую встречу UAFPUG продолжается, Закулисы Flex и секрет успеха опенсорс-проекта, весь Фев





Примечания:
Статус документа
: в процессе
   2002-2007 Производство: Рост Прибыли · О проекте · Подписка на новости (RSS)