Документация по Flex утверждает, что метаданные используются во Flex-приложениях для указания компилятору и парсеру дополнительных параметров классов, их свойств или методов. Например, в коде AS3-класса можно указать его события с помощью мета-тэгов [Event] (пример). После этого компилятор и парсер кода начинают "понимать" указанные события и при использовании данного AS3-класса в качестве MXML-компонента среда разработки Flex Builder будет выдавать к нему соотвествующие подсказки кода. А указав для свойства класса мета-тэг [Inspectable], вы сделаете его доступным инспектору свойств компонента (панель "Flex Properties"). Это встроенные мета-тэги, вот их полный список: Metadata tags in Flex 3. Присказка закончилась, дальше идет сказка.
describeType()
Более того, можно не только получить доступ к встроенным метаданным в время выполнения, но и вводить собственные мета-данные, не предусмотренные разработчиками Flex Framework. А чтобы они вместе со встроенными мета-данными попали в откомпилированное приложение, нужно указать их в опции компилятора -keep-as3-metadata.
-keep-as3-metadata
Вот более свежие примеры от Эли Гринфилда, демонстрирующие, как с помощью собственных мета-данных можно вызывать функцию при каждом изменении некоего AS-выражения, или как создавать одно- и дву-направленные связывания между частями вашего компонента, или как в декларативном стиле назначить обработчик события части вашего компонента (online demo).
И Кристоф, и Эли предоставляют исходники к своим экспериментам (не очень сложные).
Уже применяем давно это все :)
С вами, молодой человек, вопрос ясен :)
Что-то настораживает всё это - особенно ввод собственных метаданных. Пахнет очередным уходом от основных стандартов программирования и хаками. На сколько оправдано использование таких методов? Ведь эти задачи можно решить документированными методами? За словами "упростить" и "просто" могут скрываться совсем не простые проблемы.
Racer, радует только то, что только самые умные и отважные девелоперы смогут накосячить в этой области, поскольку осилить саму эту инфу, на мой взгляд, не очень просто. Фильтр такой :)
Говорят, хорошо то, что работает. Может так получиться, что такие вещи будет использоваться только новичками, причём только для того, чтобы показать свою крутость.
Я не однократно сталкивался с программистами, которые программы пишут путём составления из чужих исходников чего-то, что должно работать примерно так, как надо. Но что означает копируемый ими код, из чужих программ - они не знают.
Сегодня мы радуемся таким методам, а завтра у будем вынуждены покупать новые ПК просто потому, что молодёж так пишет программы.
Друзья, я разделяю ваши опасения, но втайне все же надеюсь на лучшее и на то, что эти фичи будут вскоре надлежащим образом задокументированы :)
>Пахнет очередным уходом от основных стандартов программирования и хаками. аннотации не есть хак - это еще один инструмент в руках разработчика. сама возможность их использования только добавляет плюс actionscript'у :)
"С помощью собственных мета-данных он описывает структуру таблицы БД..."
> очень неправильный подход!
Хм... Значит Hibernate весь насквозь неправильный? :)
Выходит так :)
Мета-разработка есть и в UML. Вот только это добавляет проблем, даже знатокам объектного проектирования. В последние годы приставка "мета-" очень сильно затёрлась, и не редко используется как нечто попсовое, привлекающее внимание.
Не редко, для решения сложнейших задач используются простейшие ходы.
Но тут, дело не в простоте - тут это как раз преподносится как нечто еще более упрощающее - а в том, что логику кода начинают заменять различного рода вставками, загрязняя сам язык. Если, к примеру краткий код типа ...?...:... еще можно как-то простить, так как заменяет он лишь малые операции, то когда целые логические блоки превращают в еле понятную строку - хз. Всё это мета-кодирование, просто побочное явление Flex-фреймворка, и присуще только ему.
Но у нас есть выбор - пользовать и не пользовать. И это превосходно. А мода пройдет, а истинная логика останется вечно :). Ибо ведь пришли же мы от безтипового AS1 к строготипизированному AS3, хотя, казалось бы, общие тенденции современного программирования обратны.
2Dan hibernate, если он на сервере - правильный. вы же не будете его использовать в java апплетах...
Неправильный он во флеше - потому что флеш - это клиент. А клиент не должен решать где-что хранить, это забота сервера, который отвечает за правильность бизнес-логики.
Там речь идёт об AIR-приложении. И исключительно в качестве примера (скорее всего - специально для тех, кто привык к анотациям именно в том виде, в котором они применяются в Hibernate).
Не исключено, что в будущем какие-то AIR-приложения (локальные, не предназначенные для работы с удалённым сервером) будут исплользовать локальную СУБД для хранения своих данных.
Другой пример - аналог MySqlAdmin на AIR. Тут тоже вполне можно иметь прямой доступ к СУБД, а не говородить ещё одну прослойку.
Да даже если взять клиент-серверное приложение. Например, форум. Клиент говорит серверу: а покажи-ка мне 20 сообщений из топика с id=1234. Не через SQL-запрос, а скажем вызовом метода через AMF. А сервер уже формирует SQL-запрос, отправляет его СУБД, получает ответ в табличной форме и возвращает его клиенту именно в таком виде, т.е. совокупностью строк и полей. Клиент получает результат и преобразует в массив объектов. Вот тут метаданные (aka аннотации) очень помогут, чтобы быстро связать поле объекта и поле таблицы (а точнее - поле результата запроса).
*говородить = городить :)
Короче убедил. Применительно к Flex-разработке важная фича. Но осторожность (скорее, разумный подход к использованию) не помешает. Вот еще бы документировали. Видимо, это как раз из тех скрытых возможностей, которые специально приоткрывают, чтобы народ попробовал, и если попрет - документируют.
2Dan Если декстоп, то да, конечно... Кстати, уже сейчас, AIR-приложения обеспечены sqlite драйвером...
По поводу сервера (SQL --> AMF) - готов с вами поспорить... Если даже ограничить видимость объектов и разграничить права (кстати, будете парсить SQL???), а что если злобный посетитель отправит очень ресурсоемкие запросы и с большой частотой? Понимаю, это нежелание программировать backend, но что тогда случится с нашим супернадежным сервисом?
2Иванов С.А. Эээ, брат...так альфаканал не работает ( думаю, надо: 1) либо ловить WM_PAINT, WM_NC_PAINT и там уже накладывать на задний план 2) либо как-то ATL контейнер научить это делать
299$ берут не за то, что вы написали, а за возможность загрузить swf из ресурсов приложения, если грузить из файла, то в ваш код можно упростить минимум на 7 строк - они здесь лишние, просто указав вместо имени окна путь к swf файлу.
это я про http://www.f-in-box.com