Второй день был не хуже, чем первый.
День начался с рассмотра архитектурных фреймворков для флекс, где Яков забил пару гвоздей в гроб мертвого Cairngorm и полуживого PureMVC, сказал пару хороших слов про Mate, кое что про Robotlegs, и высоко оценил Parsley.
Насчет Cairngorm говорить вообще нечего, RIP.
PureMVC переусложнен и только увеличивают объем кода, который нужно писать разработчику, не давая никаких весомых преимуществ.
Mate в общем хорош. Из недостатков Яков назвал отсутствие релиз версии и отсутствие поддержки Data Managment Services от LCDS. Это делает его непригодным для энтерпрайза, ибо заказчики боятся даже того, что пронумеровано версией 1.x, чего уж говорить про версию 0.8, в которой Матэ пребывает последние 3 года без всяких изменений :)
В последние годы во флекс разработке стали модны фреймворки поддерживающие Dependency Injection. Очевидное их преимущество в том, что они упрощают автоматическое тестирование. А что касается низкой связанности, то она во флексе легко обеспечивается и без DI. Достаточно опираться на события и биндинг.
Robotlegs более-менее терпимый, хотя тож с оверхедом. Но там коряво сделаны Dependency Injection. Объекты различаются только по типу, поэтому на каждый объект должен быть свой класс (что по мне полный бред).
А вот Parsley Фарате очень нравится. И Swiz тоже, причем Фарата не видит существенный различий между Parsley и Swiz. Уменьшает объем кода, не инвазивный, можно использовать его компоненты частично, а не весь фреймворк, хорошо вписывается в архитектуру флекс. Единственный недостаток -- сложен в освоении.
Еще Яков слегка упомянул модные нынче сигналы, которые некоторые используют вместо событий. Яков не против использования сигналов, и признает за ними некоторые преимущества. Но Фарата предпочитает использовать события, которые ничем не хуже :)
Тем не менее, Фарата по прежнему придерживается мысли, что архитектурные фреймворки во флекс проектах использовать не нужно. Эти фреймворки, может быть, удобны для команды, где один супер стар разработчик-архитектор, и несколько посредственных разработчиков, задача которых вписывать код в те точки, которые им укажут. Для разработчика-одиночки, или для небольшой команды из равных по силам (и при том хороших) разработчиков, такие фреймворки преимуществ не дают.
И я склонен с этим согласится, но от Mate не откажусь :)
Потом была очень интересная тема об автоматизации функционального тестирования. Эта тема для меня вообще новая, до этого я не вникал, что там к чему.
Рассказывал Сергей Язловецкий. Он рассказал про архитектуру automation во флекс фреймворке, что нужно сделать в своем коде, чтобы поддерживать automation, какие тулы для тестирования можно подключать. И показал, как использовать Flex Monkey.
Это было круто, сразу стало ясно и понятно, как оно все работает. И этих знаний достаточно для быстрого старта.
Потом Виктор Распутнис еще раз повторил свой доклад про разработку под андроид на флексе и джаве, с BlazeDS. На этот раз в более быстром темпе, и со смещением акцента на другие детали.
В первых раз он рассказывал, как это технически реализуется. А сейчас больше о том, для чего это нужно.
Это нужно, чтобы дать доступ флекс приложению к нативным API андроида, чего Адоби пока не дает, но обещает дать к концу года. Что это будет за доступ, насколько он будет полным, и когда будет готов -- никто не знает. А BlazeDS работает уже сейчас, и дает полный доступ к API.
Но это еще не все. Виктор рассказал о концепции "сервер в кармане". Если у нас на мобильном девайсе работает полноценный сервер, то его можно использовать именно как сервер. То есть, с ним могут общаться другие мобильные девайсы и обмениваться данными в обход сервисов провайдера или оператора мобильной связи.
Почему именно веб-сервер, и именно BlazeDS, вместо более подходящих (по моему мнению) сокетов? Потому что Фарата сраслась с инфраструктурой BlazeDS и хотят оставаться в ней. Недостатков в таком подходе, в общем-то, и нет. Да, веб-сервер менее эффективен, чем сокеты. Но в данном случае ему не нужно обслуживать сотни клиентов, клиент и сервер работают на одной машине, поэтому эффективность особого значения не имеет.
Правда я сам еще призадумался бы, а кто бережнее обращается с ресурсами мобильного девайса (память, проц и заряд аккумулятора), BlazeDS или нативный сервис, общающийся с приложением через сокет? Но все из-за моей склонности к сокетам, которая так же велика, как склонность Фарата к BlazeDS :)
Почему же Фарата непременно хочет использовать флекс для андроид приложений, а не чистый джава проект? Причины тому две. Во-первых, они считают, что флекс -- самый быстрый и эффективный способ строить UI (и я с ними соглашусь, если речь идет об энтерпрайз приложениях). Во-вторых, если у них одно приложение должно работать в вебе, на десктопе, и на андроиде, то они хотят иметь максимум общего кода для всех этих версий.
Валерий Силяев показал свое решение для отображения больших объемов данных.
Для начала тут нужна динамическая подгрузка данных по требованию. Размер экрана компьютера все равно не позволяет показать одновременно много записей, поэтому сразу нужно грузить только один экран.
Грузить больше данных плохо по двум причинам: во-первых, это лишний траффик, во-вторых (что может быть более важно) это лишняя нагрузка на проц. Ибо все пришедшие данные десериализуются. Если их много, то десериализуются они долго, и замораживают приложение, которое перестает откликаться на действия пользователя.
Так что грузится один экран, а затем, по мере того, как пользователь скролирует грид, подгружаются новые страницы данных.
Однако этого еще мало, ибо данные занимают память. И миллионы записей в памяти все равно не поместятся. Так что помимо загрузки нужных страниц, нужно еще выгружать из памяти ненужные.
Реализация Валерия позволяет отобразить 4,5 миллиона записей в спарковском гриде, и 10 миллионов в mx гриде. Решение это привязано, конечно, к BlazeDS. И конечно, сортировку и фильтрацию данных нужно делать на сервере.
Разница между mx и spark гридом обусловлена интересным нюансом. В mx компонентах списочные данные хранятся в Array, а в spark компонентах в основном в Vector. Array -- разреженная структура данных. Создать Array на 10 млн элементов ничего не стоит, и памяти особо не занимает, если этих элементов там реально нету. Тогда как Vector -- это линейная структура данных и занимает больше памяти. Как обычно, за лучшую производительность нужно платить большим расходом памяти :)
Тут было теоретическое занятие и workshop. Особо останавливаться на этом не буду. В общем-то, ничего нового, в сравнении с тем, как эта тема освещалась 2 года назад, не было.
Упомяну пару моментов:
По моему мнению Фарата эту тему переусложнила. Много сложных и ненужных (ну или редко когда и кому нужных) деталей. Материал можно упростить.
Ну вот и все. Мастер-класс был очень полезным, и я рад, что на него попал.
А еще я обзавелся автографами Якова и Виктора на своем экземпляре Enterprise Development with Flex :)
Comments
prime.vik (not verified)
Sat, 06/25/2011 - 19:27
Permalink
Mate за последние пол года
Mate за последние пол года переходил из версии 0.89 в 0.9 и сейчас он в 0.91
dmoskovsov (not verified)
Sat, 06/25/2011 - 21:36
Permalink
На киевском фпуге была
На киевском фпуге была довольно умная мысль, о том, что мате, возможно, уже достиг совершенства в своеи нише, в том что он предоставляет. Поэтому и нет миллионов апдеитов.
prime.vik (not verified)
Sat, 06/25/2011 - 19:40
Permalink
Парсли и Свиз на столько
Парсли и Свиз на столько "развязаны" внутри что это больше похоже на набор инструментов, чем на архитектурный фреймворк
yzh44yzh
Sun, 06/26/2011 - 10:21
Permalink
Поскольку Deep поленился
Поскольку Deep поленился откоментить сюда, придется мне скопипастить его комменты из жуйка. А то никто не узнает правды про robotlegs :)
@deep:
Про robotlegs полный бред, DI там отличается не только типом, но и именем, например так [Inject(name="myNamedDependency")]
@deep:
@deep Вообще работаю с роботлегс уже месяца два, никаких проблем не ощутил, по сравнению с mate который сразу меня напряг.
@deep:
@yzh44yzh Я не пытаюсь холиварить :) mate я очень люблю и использовал его пока работал над flex проектом. Роботлегс тоже хорошь, он отлично вписывается в мой стиль программирования, плюс он не плохо дружит с модульными флешками и т.д.
А вот прочти кто твой пост в блоге и даже не полумает посмотреть в сторону роботлегс, т.к.
"Но там коряво сделаны Dependency Injection. Объекты различаются только по типу, поэтому на каждый объект должен быть свой класс (что по мне полный бред)."
что по мне полный бред
deep (not verified)
Sun, 06/26/2011 - 10:45
Permalink
Только решил откоментить :) А
Только решил откоментить :) А тут уже 3 моих коммента %)
Добавлю, что robotlegs использую исключительно для чистых as3 проектов, что немного не коректно его сравнивать с mate
Алексей (not verified)
Mon, 06/27/2011 - 17:10
Permalink
Да, с Robotlegs маху дали.
Да, с Robotlegs маху дали. Делаю на нем проекты - нравится больше, чем Мате. Нет, Мате хорош (делал на нем раньше) и вполне даже. Но есть один момент при сравнении - Robotlegs как бы намекает, что нужна структура приложения. MVCS желательно очень. Он намекает - девелопер не изобретает велосипед "из чего и как слепить приложение". А экономия времени на изобретение велосипеда - это и есть задача фрейверков, по-моему
Алексей (not verified)
Wed, 06/29/2011 - 20:44
Permalink
Интересно, а BlazeDS - это же
Интересно, а BlazeDS - это же сервлет, собственно. Под какой-нибудь Jаva-контейнер. Типа Tomcat. Его, что ли, тоже ставят на андроид?
yzh44yzh
Thu, 06/30/2011 - 13:53
Permalink
Да, сервлет. Да, ставят )
Да, сервлет. Да, ставят )
multik (not verified)
Wed, 06/29/2011 - 23:26
Permalink
видео с конференции?
Судя по описанию действительно конференция была крутой. А была видео-запись выступлений и если да, то где можно посмотреть?
yzh44yzh
Thu, 06/30/2011 - 13:54
Permalink
Увы, записать видео не
Увы, записать видео не получилось.
Hyzhak (not verified)
Sun, 09/04/2011 - 23:10
Permalink
Модульная архитектура
Интересный отчет. А можно ссылки на обсуждения "Модульной архитектуры"? Интересно как ее можно еще связать с фреймворками (Mate, Parsley, Robolegs). которые кажется не используют sharedEvents.
Спасибо =)
yzh44yzh
Mon, 09/05/2011 - 09:10
Permalink
В конце статьи я дал ссылку
В конце статьи я дал ссылку на книгу Якова и Виктора, где пару глав посвящено модульности. Есть ли этот материал еще где-то в интернете, я не знаю. Но саму книгу без труда можно найти.
Hyzhak (not verified)
Mon, 09/05/2011 - 14:50
Permalink
Спасибо. Нашел, изучаю.
Спасибо. Нашел, изучаю.
Hyzhak (not verified)
Tue, 09/06/2011 - 22:31
Permalink
Но вопрос интеграции с
Но вопрос интеграции с фреймворками остается открытым
yzh44yzh
Wed, 09/07/2011 - 12:41
Permalink
Ну он и будет открытым, пока
Ну он и будет открытым, пока кто-нибудь не попробует сделать это на практике и не поделится потом своим опытом )
Farata Systems вообще не используют фреймоворки, поэтому они об этом не расскажут.
Я сам использую Mate, но вот в контексте модульности он мне не нравится совсем. Так что подумываю о том, чтобы в следующих проектах отказаться от Mate, и тоже, как Farata, делать без фреймворков.
hyzhak (not verified)
Fri, 10/21/2011 - 17:12
Permalink
Cairngorm
А кстати, что на счет Cairngorm 3 (http://sourceforge.net/adobe/cairngorm/). Он вроде как бы объединяет под собой все уже созданные фреймворки. Его кто-то использует?
yzh44yzh
Fri, 10/21/2011 - 18:27
Permalink
а ничего, никто его не
а ничего, никто его не использует )
Add new comment