Flash Ripper RSS Readers

Нужна помощь в вопросе «быть или не быть» по поводу Flex'а

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

VasilioRuzanniVasilioRuzanni, 8 сентября 2008, 14:30

Ростислав, добрый день.

Обрисую ситуацию, а затем, задам собственно вопросы.

Собственно, ситуация такая, что при разработке заказных решений для интранета у нас используется тонкий клиент с использованием Ajax. Однако, постоянно появляется желание и необходимость делать интерфейсы все более и более «богатыми», так что зачастую веб-приложения в интранете более похожи на «приложения» нежели на «веб».

Издержки подобного подхода в последнем проекте перегнули все возможные и невозможные палки (в частности — кроссбраузерность и «мелкие красивости») — слишком уж много времени отбирает создание подобного с использованием HTML+CSS+JavaScript, да и работает недостаточно быстро. Все это заставило в очередной раз, но уже более усиленно посмотреть в сторону «полноценных RIA».

Поскольку в качестве серверной технологии мы специализируемся на платформе .NET, первым претендентом на замену HTML+JS стал Silverlight. Впрочем, его тут же отмели по целой куче причин. Конечно, огромный плюс то, что он использует C# в качестве языка, но его сырость и работа со шрифтами заставили отказаться от него как от полноценной замены.

Разумеется, вторым претендентом был Flex/Flash.
И вот его использование пока что кажется очень даже реальным.

Сейчас грядет проект, очень крупный, и цена подобного решения может быть очень высокой, поэтому и решил обратиться к профи в этом вопросе. Я понимаю, что наверняка ответы на многие вопросы можно найти, прочитав кучу документации, это в процессе, плюс ответы часто не лежат на поверхности.

Интересуют, в частности, следующие моменты:

1. Насколько Flex в целом подходит для крупных решений со сложной бизнес-логикой? С учетом того, что это именно «тонкий клиент», то есть никаких расчетов на клиентской стороне не производится (кроме самых простых, необходимых для интерактивности).

2. Насколько Flex приспособлен для получения и работы с достаточно большим количеством данных (ну то есть, насколько теряется/не теряется производительность при работе, скажем, с очень длинными списками)? В частности, по сравнению с HTML+JS, если известно.

3. Какие могут быть подводные камни в использовании Флекса как замены HTML+JS для UI?

4. Насколько просто или сложно в целом разрабатывать собственные компоненты и поддерживать их по сравнению с аналогичными в HTML+JS?

5. С точки зрения того, что эта технология будет внедряться как новая (если будет), стоит ли сейчас полностью сосредоточиться на стабильной версии или же можно начинать сразу с Flex 4 Alpha?

Буду премного благодарен за ответы на эти вопросы. Просто реально не у кого спросить — кругом так и живет стереотип того, что «все, что может быть проиграно Flash Player'ом — мультики или баннеры». А нам хотелось бы использовать технологию с большим размахом, в производстве интерфейсов информационнх систем.

Заранее спасибо!


rostrost, 8 сентября 2008, 17:36

Привет!

Дельные вопросы. Отвечу сейчас очень коротко за нехваткой времени, а попозже — попробую дать более развернутые ответы.

1. Флекс хорошо подходит для создания сложных онлайн-приложений, или RIA. И чем сложнее приложение (до определенного разумного предела, конечно), тем больше Flex подходит для его разработки. Примером тому являются такие приложения, как, например, текстовый онлайн-процессор Buzzword. Также Flex использовала компания Oracle для производства 7 приложений.

Множество примеров можно увидеть во Флекс-вики (некоторые уже могут быть уже устаревшими).

2. Для больших массивов Flex вполне приспособлен и будет их обсчитывать быстрее, чем в JavaScript (существует также проект, где ActionScript3 используется для быстрого разбора XML для AJAX-приложения). Но и здесь важно применять правильные алгоритмы для обработки огромных массивов данных.

3. Главные издержки Flex — интеграция с браузером и поисковыми машинами. Хотя и здесь уже делаются конкретные шаги для преодоления поисковых барьеров. Еще одна важная издержка — Flex нужно изучать, чтобы обойти возможные ловушки заранее.

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

5. Выбрать ли Flex 3, или Flex 4 сейчас — зависит от сроков вашего проекта. Если вы собираетесь выходить в релиз через год — то стоит начинать сразу с Flex 4. Но не все со мной согласятся.


Если у вас есть такая возможность, то я очень рекомендую вам посетить встречу Российкой группы пользователей платформы Adobe Flash (RAFPUG). Думаю, что там вы сможете обсудить массу вопросов с опытными Flex-разработчиками. Вот — отчет о последней встрече, где было много хорошего Флекса.

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

VasilioRuzanniVasilioRuzanni, 8 сентября 2008, 18:45

О, спасибо огромное! Ответы достаточно емкие.

Насчет публикации — вполне за! Вопросы самые общие, и я уверен, что именно их себе задает любой столкнувшийся с моей ситуацией человек.

Уточнения по некоторым вопросам:

3. Изучение — само собой. Сейчас именно для этого и собираю информацию — чтобы иметь в виду, стоит ли вкладывать в углубленное изучение всей client-side-командой именно этой технологии. А интеграция с поисковыми машинами для нас даже не является проблемой — наша область деятельности — интранет и экстранет, ну то есть системы, а не веб-сайты.

5. Релизиться все будет постепенно, используя адаптивный (Aglie) подход и спринты длиной в месяц. Думаю, стоит пока остановиться на 3-й версии.

Тут, кстати, возник еще вопросец:
6. Грядущая тема Adobe — Thermo — какое место в цепочке разработки предполагает занять? То есть, что такого нельзя (или слишком сложно) сделать с Flex сейчас, что можно будет сделать с Thermo?

Вообще, сейчас склоняемся к реальному использованию Flex в проекте. Все-таки, графическая подсистема Flash намного превосходит голый html с картинками и JS для интерактивности, плюс за спиной у технологии не кто-нибудь, а Адоби — большая и стабильная компания. И еще очень радует тема интеграции и возможность запуска приложения на десктопе с использованием Adobe AIR. Про отстутствие проблемы кросс-браузерности и говорить не приходится, а установку Flash Player'а очень просто вписать в спецификацию разрабатываемого решения.

P.S. Мы дислоцируемся в Тольятти, в связи с чем вопрос — проводятся ли встречи RAFPUG у нас или в Самаре (совсем рядом)? С удовольствием бы послушал и пообщался с людьми «в теме».

Друзья, вам есть что ответить автору вопросов или поправить мои ответы? Думаю, вопросы эти популярны и ответы на них могут пригодиться многим при выборе RIA-технологии. Напишите, что вы об этом думаете.

Писал Rost, 8 Сентябрь 2008 18:02

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

Silverlight и Flex. есть ещё варианты?

if
... Silverlight. Впрочем, его тут же отмели по целой куче причин.
then
ничего кроме флекса на горизонте не видно(мне не видно).

Так в чём вопрос?

An - 8 Сентябрь 2008 18:39

По сути дела, мой вопрос был в том, может ли Флекс те или иные вещи или не может. А точнее еще - как может. Чтобы не получилось обмена шила на мыло. Очень интересуют как причины "за", так и "против" использования Flex как замену HTML+JS.

Vasilio Ruzanni - 8 Сентябрь 2008 18:44

Вопрос в том не сменят ли они шило(аякс) на мыло(флекс).

Имхо нет, флекс менее геморней чем аякс.

Так же я не соглашусь с Ростом, насчет того чтобы делать сайт сразу на 4ерке. Ориентироватся да стоит, но нужно понимать, что это софт, а софт имеет тенденцию гробить дедлайны, очень глупо будет смотреть на конкурентов, которые выпускают свои Флекс3 приложения-конкуренты, пока авторам придется ждать релиза =)

Nirth - 8 Сентябрь 2008 18:45

Относительно "самых последних" версий. У меня есть устойчивое мнение, что использовать новую версию софта нужно тогда, когда в ней есть такие вещи, без которых разработка в принципе невозможна, либо которые существенно ее упрощают. Определитесь для себя, что такого есть в гумбе, чтобы совершенно однозначно перейти на нее и в дальнейшем не жалеть об этом решении.

meps - 8 Сентябрь 2008 18:55

to Vasilio Ruzanni
flex может одно - заметно повысить скорость разработки приложения, а вот AS может всё. Если он чего не может - это просто мы не знаем КАК он это может))).
to Nirth
я думаю: если срок ~год то ждать не прийдется.

An - 8 Сентябрь 2008 18:57

An, ну будем надеяться, что AS и правда может все =) А разобраться как - эт всегда дело техники.

По проекту - промежуточные релизы (Preview, Alpha, Beta и так далее, с неполным функционалом) обязаны быть раньше, не позже пары месяцев с начала проекта, однако в стадию RTM продукт пойдет не раньше, чем через год.

По поводу "последних версий" - тут и хотелось бы узнать у профи - насколько Flex 4 может дать прирост в скорости или удобстве разработки и какие при этом существуют реальные риски изменений чего-либо в составе Flex 4 к релизу (в частности - существенных изменений - так, что если вдруг придется рефакторить всю систему с головы до ног)?

Vasilio Ruzanni - 8 Сентябрь 2008 19:35

to Vasilio Ruzanni
Говорить о приросте производительность до выхода релиза рановато...)
Риски изменений зависят от конкретного проекта. Если Вам с головой хватает функционала из SDK от 3 версии - рефакторить вообще ничего не прийдеться. Но если охота пощупать 3D и другие фичи то нужно сразу садиться за 4 со всеми последствиями.

Новая версия даёт новые возможности. Так везде. Если Вам эти возможности нужны... если нет ....

Правда есть одно но:
Я знаю одного хорошего флешера который пишет на AS2 тк ему этого с головой хватает. Это уже крайности. Особенно приятно потом такой проект расширять (учитывая что мы в одной команде)))

An - 8 Сентябрь 2008 19:59

to Vasilio Ruzanni
На Флексе разработка в разы быстрее, но минусы довольно существенны:
- большой тормозняк при каких-то манипуляциях, проц. может и за 100% зашкалить на время. А это раздражжает, даже если врема подвисания 1-2 сек.
- вывод больших данных невозможен без разбиения на маленькие страницы, а если еще и вид представления довольно сложен, то вообще труба (6-8 записей максимум, против ХТМЛ 500 - 1000 записей).

Эти выводы -- на основе разработки комплексного интранет приложения на Флекс 3

ir73 - 9 Сентябрь 2008 9:25

ir73, дельная мысль. Вот это больше всего и волнует.

6-8 записей?? Или это в пример - как отношение производительности, то есть 8 против 1000?

Кстати, на клиенте, если это и HTML+JS всяко рассматривается использование фреймворка типа ExtJS. Неужто, Флексовые компоненты менее производительны?

Насчет тормозов у нас, при изучении темы Флекса, возникло только одно нарекание - нет многопоточности (в отличие от того же Silverlight) - соответственно, нельзя разделить на потоки обработку графики и расчеты+обращения к сервисам.


Раз уж зашел разговор о производительности - всплывает вопрос: Влияет ли как-то на производительность использование Adobe AIR вместо "голого" Flash Player'а в браузере?

Vasilio Ruzanni - 9 Сентябрь 2008 9:44

6-8 записей?? Или это в пример - как отношение производительности, то есть 8 против 1000?

Повторюсь, это в моем случае, то есть в случае со сложной презентацией одной записи (одна запись: картинка, 2 таблички, текст, все это еще и разворачивалось и сворачивалось с анимацией). В случае обычного листа может быть и 100 записей, и более, но в целом да, по производительности тут засада.

Раз уж зашел разговор о производительности - всплывает вопрос: Влияет ли как-то на производительность использование Adobe AIR вместо "голого" Flash Player'а в браузере?

FP берет столько ресурсов, сколько ему дает браузер, а AIR столько, сколько хочет (в пределах ОС).

ir73 - 9 Сентябрь 2008 9:54

to Vasilio Ruzanni

Кстати, ответа на свои вопросы вы тут не найдете: сколько людей, столько и мнений. А мнения будут диаметрально противоположными, каждый рассуждает основываясь на своем проекте.
Так что максимум что вы сможете сделать, это все прочитать, а решать вам надо будет самостоятельно.

ir73 - 9 Сентябрь 2008 9:59

ir73, Ну разумеется, я отдаю себе отчет в этом. Решение за меня всяко никто не примет.
Однако, радует, что люди, хоть и советуют с высоты своей колокольни своего опыта, все советы по делу и по теме, есть о чем подумать. Посему, хотелось бы услышать еще мнений профи.

Vasilio Ruzanni - 9 Сентябрь 2008 10:11

>- вывод больших данных невозможен без разбиения на маленькие страницы, а если еще и вид представления довольно сложен, то вообще труба (6-8 записей максимум, против ХТМЛ 500 - 1000 записей).

Уверен? может что-то не так делаешь? Может неверное "представляешь" данные?

Вывод данных используя стандартные средства (читай не сильно извращаясь в оптимизации) позволяет вывести практически любое количество данных (ограничено как я понимаю только памятью гига для флеш плеера, в моем тесте он умер на 1.7Гб + 1.7Гб VM).

Я ради интереса проэксперементировал List, обычный рендерер, 9й флешплеер и фф справились с отображением 5 500 000(!) элементов типа

{label: (i)+'. sdfljhsfk kjsdfhsdkjfh ksjdfhsjkdhsdkjf hsdf hsdfkjsdhf jksdhfkj shdfkjsdhf ksjdfh skdjdfh ksjdfh skdhf sdkjfhsd fkjsdhf ksdjfh sdfkhsdf jksdhf '+Math.random()};

тормозов видно небыло в процессе скролла ) вернее листу пофиг сколько отображать -- просто массив не поместился в памяти).

Можешь указать случам где нужно манипулировать с таким количеством данных? Онлайн?.

__i - 9 Сентябрь 2008 10:43

>Раз уж зашел разговор о производительности - всплывает вопрос: Влияет ли как-то на производительность использование Adobe AIR вместо "голого" Flash Player'а в браузере?

в АИР работает быстрее) точно сказать не могу не эксперементировал, но случайно наткнулся на то что если загрузить веб страницу с флеш приложением в АИР (используя его HTML) то работает в 1.2-1.4 раза быстрее :)

__i - 9 Сентябрь 2008 10:48

По поводу Flex 3 vs Flex 4 - зависит от коллектива разработчиков. 4я версия флекса полностью переработана, и это даст преимущество на старте в случае, если разработчики не знакомы с флекс вообще. Если команда опытная, она сможет начать разработку на третьей версии, ориентируясь на архитектуру 4й, хотя все равно при переходе на 4й флекс переписывать придётся много.

Флекс 3 не сравним с html+ajax в плане удобства работы с текстом, это узкое место 9го плеера, во флекс 4 и 10м плеере работа с текстом поставлена на новый уровень (http://opensource.adobe.com/wiki/display/flexsdk/Gumbo+Text+Primitives).

FSB - 9 Сентябрь 2008 11:01

FSB, а насколько 4-й Flex реально сейчас приспособлен для разработки на нем? То есть, понятно, конечно, что что-то будет переделываться, но в целом, как дела у него обстоят с "feature-complete"-ностью? И есть ли возможность "в узких местах" использовать фичи Flex 3?
А то как бы не получилось как с Silverlight 2.0 - много чего нет (всяких нужных компонентов), самим делать смысла нет, так как MS в итоге все равно все сделает, но и замены нет никакой на текущий момент.

Vasilio Ruzanni - 9 Сентябрь 2008 11:20

Vasilio Ruzanni проектов на 4м пока не видел и сам не имел, знаком только по вылоденным докам и статьям, но Артемий Малков на своём докладе о Gumbo утверждал, что третьи компоненты в Gumbo работают на ура, я не проверял :)

FSB - 9 Сентябрь 2008 11:27

>Насчет тормозов у нас, при изучении темы Флекса, возникло только одно нарекание - нет многопоточности (в отличие от того же Silverlight) - соответственно, нельзя разделить на потоки обработку графики и расчеты+обращения к сервисам.

При большом желании можно реализовать слабое подобие многопоточности с помощью Timer-а. Иногда очень помогает, мы на проекте делали расчеты таким образом, без таймера анимация зависала на время расчета, при использовании таймера в 1 mc зависание отсутствует (это работает если расчеты могут быть рекурсивными или их можно разбить на этапы)

dolph1n - 9 Сентябрь 2008 12:55

Кстати, ответа на свои вопросы вы тут не найдете: сколько людей, столько и мнений.
Это очевидно, ir73. Так устроена любая дискуссия - и в том ее польза, что мнения можно сравнить.

- большой тормозняк при каких-то манипуляциях, проц. может и за 100% зашкалить на время. А это раздражжает, даже если врема подвисания 1-2 сек.
- вывод больших данных невозможен без разбиения на маленькие страницы, а если еще и вид представления довольно сложен, то вообще труба (6-8 записей максимум, против ХТМЛ 500 - 1000 записей).
Эти выводы -- на основе разработки комплексного интранет приложения на Флекс 3

Повторюсь, это в моем случае, то есть в случае со сложной презентацией одной записи (одна запись: картинка, 2 таблички, текст, все это еще и разворачивалось и сворачивалось с анимацией). В случае обычного листа может быть и 100 записей, и более, но в целом да, по производительности тут засада.

На мой взгляд, здесь как раз тот случай, когда флекс неправильно готовят. Именно об этом я говорил здесь:

В этом фреймворке уже есть много оптимизаций для производства как приложений, так и компонентов, но, повторюсь — нужно изучать их, чтобы использовать правильно.

Чего стоит одно только неправильное использование DataBinding - можно любую аппликуху тормозной сделать. Вот, целая статья об этом вышла: ловушки в которые попадают пользователи DataBinding.

А правильная готовка Flex дает такие проекты, как графические онлайн-редакторы от Aviary мультиплатформенные ОС Glide OS (еще ссылка).

А вот весьма тяжеловесный Excel онлайн (spreadsheet на Flex) - idubee.

Как видите, там везде много данных, особенно в последнем примере - и ничего, рабоатет все :)

Рост - 9 Сентябрь 2008 13:13

Всех приветствую, внесу доп. ясность про фреймворки. Про то, какой фреймворк (3 или 4) выбрать с точки зрения проекта я бы сформулировал к вам вопрос так: "С чем ваше приложение будет работать больше - с интерфейсом или с данными?" Основная идея в выпуске версии 3->4 - это Design in Mind, т.е. значительная переработка всего того, что отображается, чтобы оно было легче / быстрее / гибче.
Если вам нужно делать кучу нестандартных компонентов + поддерживать / развивать их на протяжении нескольких лет, то вы серьезно сэкономите, если будете иметь в виду Flex 4. Если же у вас интерфейсы достаточно простые, состоящие из стандартных компонентов, то не заморачивайтесь и делайте на Flex 3. Потом портировать при желании будет несложно - заменой теймспейса (+ пока не видел, но я думаю будут тулзы для портирования).

Артемий Малков - 9 Сентябрь 2008 13:31

По поводу производительности на больших списках из простых элементов - никаких тормозов при грамотной реализации не замечал. На эту тему недавно как раз сделал тесты: http://riapriority.com/blogs/slon-vsapogah.php/2008/09/03/advanced_datagrid_itemrenderers_speed_ef

Это достигается за счет того, что рендерится реально всегда совсем немного элементов (видимые + несколько в кеше).

Другое дело, что при наличии на экране большого количества объектов наступают тормоза, и наступают они раньше, чем в HTML.

По поводу 3/4 - даже не знаю, что лучше. Мне кажется, основная проблема в том, что пользователям для просмотра (на этапе Alpha/Beta/... и в случае задержки релиза) придется скачивать себе бету плеера. А это сложнее, чем если плеер сам обновится.

Slon_vsapogah - 9 Сентябрь 2008 16:30

Если нужно идти в production в течение ближайшего года, Flex это единственное реальное решение имеющееся сегодня. Flex 4 выйдет только через год и будет сильно меняться - не стоит рисковать.
.Net девелоперы используют Flex и ВебОрб для увеличения скорости обмена даннымы с сервером.

Посмотрите PDF моей презентации "Facelift your SOA with RIA" на сайте www.faratasystems.com под меню Conferences.

Yakov Fain - 9 Сентябрь 2008 17:13

Еще такой вопрос, уже более предметный (ну, сами понимаете, нужно взвесить все аспекты:)).

При использовании Flex 3 для разработки UI-уровня системы (комплекса систем), уже сейчас понятно, нужно использовать разного рода паттерны и микроархитектуры.

После достаточно серьезного изучения вопроса, выбор, по сути встал между двумя разработками: Cairngorm и Mate.
Первый - как бы это лучше выразиться, более прямолинейный и достаточно понятный, с учетом того, что команда разработки хорошо знакома со всеми этими принципами и паттернами. Второй - содержит отличные идеи по декларативному объявлению карт событий, что тоже безумно удобно, так как "менее многословно" (однако еще неизвестно, могут ли быть какие-то подводные камни в нем).

В связи с тем, что предполагается использовать технологию как основополагающую для большинства user-интерфейсов, хотелось бы узнать - что из этого оптимальнее использовать в крупном проекте? То есть, какой код проще поддерживать и какие неявные преимущества есть у обоих фреймворков? А возможно ли использование и того и другого сразу?

Да, еще вопрос касающийся модульности - нормально ли эти микроархитектуры укладываются в концепцию модулей Flex-приложений?

Vasilio Ruzanni - 10 Сентябрь 2008 2:25

2 Vasilio Ruzanni
Я бы не советовал налегать на паттерны очень сильно (всему своя доза), иначе год получается как швейцарский ножик, может делать все но результата "отлично" добится будет трудно.

> концепцию модулей Flex-приложений?
Cairngorm точно пашет, Mate вышел после того как я сменил образ жизни.

> то из этого оптимальнее использовать в крупном проекте?
Если вам кто то ответит на поставленый вами вопрос, не слушайте его, нельзя посоветоваь фреймворк имея на руках вместо спецификаций , слова типа "крупный" и "проект",

Nirth - 10 Сентябрь 2008 9:57

Если вам кто то ответит на поставленый вами вопрос, не слушайте его, нельзя посоветоваь фреймворк имея на руках вместо спецификаций , слова типа "крупный" и "проект",

Однако можно посоветовать то, чего делать не стоит.

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

Я несколько месяцев назад пришел в крупный проект на Flex, который писался до меня несколько лет. Изначально использовался Cairngorm, однако потом он был заброшен, и его останки видны то там, то тут.

Сам я написал 5-10 небольших проектов (до 150 часов) с использованием Cairngorm, и поэтому считаю свое мнение довольно устоявшимся и взвешеным.

1. Cairngorm хорош только в случае:
- начинающий разработчик, умеющий с толком применять фреймворк, а не прямо следовать простейшим Samples
- проект до 100 часов работы
- отсутствие модульности
2. Cairngorm очень плох, крайне вреден, противопоказан в случае:
- проект рассчитан на более чем 200 часов
- наличие модульности
3. Минусы Cairngorm:
- Огромное количество синглтонов (помеха при модульности)
- Единый контроллер, который превращается в неуправляемый гигантский класс (анти-паттерн God object)
- Команды, не знающие своего контекста, если им не передавать его через событие
- Если передавать данные командам в строгой типизации и вообще делать все по правилам, то на элементарное действие уходит очень много кода и классов:
- Для каждой небольшой группы действий - класс события, в нем - константа для каждого действия
- Для каждого действия запись в едином контроллере
- Для каждого действия класс команды
- Итого - обработка нажатия кнопки это минимум создание 1 класса и обновление 2-х других
- Структура пакетов Cairngorm препятствует модульности приложения, предлагая событиям/командам/vo расти из events/commands/vo
- Из View просто нельзя добраться до кода контроллера по F3, надо ползти по пакетам :)
- Модель-синглтон может превратиться в неуправляемый God-класс при росте приложения
- Из-за модели-синглтона усложняется реинициализация приложения - logout/login

Короче говоря, для большого проекта предлагаю вам не использовать Cairngorm.

К Mate отношусь с большим уважением благодаря недавнему докладу Constantiner'a, однако уверен что достаточно скоро вы найдете и в нем серьезные проблемы.

Вообще, подобные фреймворки - не для крупных проектов. Если вы серьезно и надолго взялись за проект - займитесь проектированием, возьмите из фреймворков лучшие идеи. И не усложняйте слишком :) Как учит нас Б. Мейер, модульность - один из главных принципов ООП. Есть и другие всякие :) Если подумать и постараться, то все получится :)

Slon_vsapogah - 10 Сентябрь 2008 11:41

Блин :) А так старался, теги всякие писал, все поехало...

Slon_vsapogah - 10 Сентябрь 2008 11:43

Slon_vsapogah, спасибо за подробное рассмотрение, но! Ряд моментов натолкнул на встречные вопросы и суждения:

1. - Итого - обработка нажатия кнопки это минимум создание 1 класса и обновление 2-х других;
А как вы себе это представляете по другому? Просто обработчик кнопки "прямо на месте"? Будет code-mess.

2. - Структура пакетов Cairngorm препятствует модульности приложения, предлагая событиям/командам/vo расти из events/commands/vo;
А нельзя сделать так, чтобы каждый модуль содержал "events/commands/vo"? Плюс имел возможность обрабатывать "глобальные" Event'ы?

3. - Для каждой небольшой группы действий - класс события, в нем - константа для каждого действия
Не вижу явно отрицательных сторон. Впрочем, ровно как и явно положительных моментов.

4. - Для каждого действия класс команды;
Что подразумевается под действием? А вообще, сдается мне, что это правильный подход предлагается.

5. - Команды, не знающие своего контекста, если им не передавать его через событие;
Команды, не знающие контекста - очень гуд! Значит их можно использовать с разными контекстами не переписывая.

6. - Единый контроллер, который превращается в неуправляемый гигантский класс (анти-паттерн God object);
Не вижу явных минусов, впрочем, пока не знаю, как выглядит большой проект на Флексе. На серверной стороне мы используем MVC и разумеется имеется множество контроллеров, для каждого типа объекта, а каждый метод отдельного контроллера - одно действие.


Соглашусь про синглтоны - сами их не очень любим, так как при написании unit-тестов их сложно сымитировать (сделать mock-объект).

Кстати, как у фреймворков с предрасположенностью к unit-тестам? У нас это обязательная практика.


P. S. А про Mate, кстати, хотелось бы тогда услышать от самого Constantiner'а, ну или кого-то еще, кто хорошо знает этот фреймворк.

P. S. S. Проект большой не просто так, а за счет огромного количества самих бизнес-сущностей. Однако, по всей системе, способы работы с этими сущностями в 90% случаев будут повторяться. Именно поэтому, мы уже сейчас считаем оправданным использование архитектурного Framework, чтобы все эти ситуации обрабатывались не так, как каждому разработчику захотелось, а в некоей стандартизированной манере - чтобы все понимали, как это делают другие.

P. S. S. S. А изобретать свой фреймворк при том, что уже есть хорошие наработки у других - гиблое дело. Можно утонуть в решении системно-архитектурных задач, вместо решения прикладных. Это пройденный этап и есть отменный опыт в подобного рода ошибках :)

Vasilio Ruzanni - 10 Сентябрь 2008 14:22

Yakov Fain - я добавил в ваш пост ссылок, спасибо за комментарий!

Slon_vsapogah — я поправил разметку в вашем посте.

Рост - 10 Сентябрь 2008 16:21

Сразу хочу сказать, что я обожаю повторное использование, фреймворки и вообще не считаю себя вполне взрослым программистом. Уж тем более не призываю вас изобретать велосипед. Наоборот, призываю использовать MVC - то, вокруг чего растут все фреймворки.

1. - Итого - обработка нажатия кнопки это минимум создание 1 класса и обновление 2-х других;
А как вы себе это представляете по другому? Просто обработчик кнопки "прямо на месте"? Будет code-mess.

Можно во view создать команду, запустить ее путем вызова ее метода, подписаться на ее события и жить спокойно. Как говорится, простота - залог здоровья:

public function button_clickHandler(event:MouseEvent):void 
{
var command:LoadContectCommand = new LoadContentCommand();
command.addEventListener(Event.COMPLETE, completeHandler);
command.addEventListener(ErrorEvent.ERROR, errorHandler);
command.execute(userNameInput.text, passwordInput.text);
}

Мы имеем 1 новый класс на обработку клика, инкапсулирующий логику.

Минусы данного решения:
- Затруднено повторное использование - но только по сравнению с Mate. По сравнению с Cairngorm повторно использовать этот view было бы так же непросто.
- view в общем случае связан с несколько бОльшим количеством сущностей из не-view, чем в Cairngorm и тем более Mate

Плюсы по сравнению с Cairngorm:
В Cairngorm для создания подобного кода необходимо дополнительно создать:
- Класс события LoadContentEvent, в нем - свойства userName и password
- Добавить вызов addCommand(LoadContentEvent.LOAD, LoadContentCommand) в контроллер
- Не нужны view-helper-ы (каждый из которых - синглтон), можно диспатчить события из логики
- Заметьте, насколько непрямой становится связь действия с логикой. Если вы хотите просто посмотреть, что происходит по клику, нужно выполнить порядка 5 действий. В вышеуказанном случае достаточно одного (Ctrl + клик по методу execute). Код как бы разбегается в разные стороны.
- А еще в вышеуказанном решении нету ни одного из указанных мной ранее минусов Cairngorm.

Плюсы по сравнению с Mate:
- Простой дебаг (пробовали когда-нибудь дебажить декларативный код?)
- Быстродействие
- мЕньший вес
- бОльшая гибкость
- Возможность быстрого доступа к коду логики

Что еще сказать... Если взять Cairngorm, Mate или Abcdef, то это гарантия того, что ваши программисты напишут чудесный код? Абсолютно НЕТ, и со мной, думаю, все согласны.

Выводы
Если вы дадите своей команде Mate или Caigngorm и скажете - "Погнали!" - и ребята начнут писать каждый в своей тарелке по модулю системы, то через 2 месяца получится top4top.

Хорошо поставленный процесс проектирования (возьмите лучшее из фреймворков!) а затем и разработки - вот что скорее всего даст отличный результат. К сожалению, как это делается в команде - не знаю.

Slon_vsapogah - 10 Сентябрь 2008 20:30

P.S: Вообще, по поводу Mate надо смотреть. Его применение не обязывает всему работать по-матевскому. Правда, ходят слухи, что один синглтон там внутри все-таки есть... 8-/

Slon_vsapogah - 10 Сентябрь 2008 20:55

Slon_vsapogah, с доводами вполне согласен, ну это речь о том, что все надо использовать с умом и без фанатизма. У нас, слава богу, пока с этим все в порядке :)
С точки зрения использования какого-то из фреймворков, действительно, не хотелось бы всяких "лишних наворотов" и при этом хотелось бы иметь нормальную возможность поддерживать много кода.

Мы за это время еще немного "изучили предмет" и пока Каирнгорм выглядит хоть и тяжеловесно, но довольно цельно, больше всего импонирует Mate (реально, на наш взгляд, лучшие концепции без железной привязки к этому фреймворку).

По поводу дебаггинга декларативного кода во Флексе пока не в курсе - как раз и выбираем. А какие здесь трудности? Кстати, unit-тестировать объекты Mate возможно?

Vasilio Ruzanni - 10 Сентябрь 2008 21:13

По поводу Mate лучше спросить у Constantiner-a, в отчете о последней встрече есть его презентация про Mate.

Slon_vsapogah - 10 Сентябрь 2008 23:14

А скажите, вот вы всякие фреймворки приводите, а для чего они все? Флекс же уже фреймворк, нафига еще надстройку городить?

Stepa - 11 Сентябрь 2008 9:42

А скажите, вот вы всякие фреймворки приводите, а для чего они все? Флекс же уже фреймворк, нафига еще надстройку городить?

Флекс - компонентный фреймворк. Mate, Cairngorm, PureMVC и т.п. - микроархитектурные/архитектурные фреймворки. Можно сказать, что они говорят, как управлять компонентами Флекса (или другого компонентного фреймворка).

Slon_vsapogah - 11 Сентябрь 2008 11:19

Вот яркий пример того, что грамотно заданный вопрос - половина ответа.

Я лишь добавлю, что Flex оправдывает правило 80/20, то есть, 20% функциональности пишутся за 80% времени, и связано это с узким местом подобных систем - кастомизация готовых компонентов не всегда решает задачу, приходится мало того что изобретать новый велосипед, так и вписывать его в эту велогонку, образно выражаясь.

Это не хорошо и не плохо, просто надо учитывать данный факт при планировании проекта и тщательнее выискивать в нем подобные "засады".

flaMaster - 12 Сентябрь 2008 11:23

20% функциональности пишутся за 80% времени

80% от чего?

ir73 - 12 Сентябрь 2008 12:18

ir73, за 80% времени, отведенного на реализацию проекта. Это принцип Парето. См http://ru.wikipedia.org/wiki/Закон_парето

flaMaster - 12 Сентябрь 2008 12:26

flaMaster, ага, и практика показывает, что этот принцип 80/20 работает все время! за 20% времени действительно реализуется основной функционал, затем все остальное время формируется сложный функционал и нюансы, нюансы, нюансы!

Vasilio Ruzanni - 12 Сентябрь 2008 13:48

Vasilio Ruzanni,
вы не про такую возможность спрашивали? ;)

FlexUnit is a unit testing framework for Flex and ActionScript 3.0 applications and libraries. It mimics the functionality of JUnit, a Java unit testing framework, and comes with a graphical test runner.

http://opensource.adobe.com/wiki/display/flexunit/FlexUnit

unodj - 12 Сентябрь 2008 21:17

unodj, ну разумеется мы уже нашли FlexUnit и даже продвинутый TestRunner для него.
Я спрашивал в контексте фреймворка Mate - возможно ли тестировать связи, которые объявляются декларативно с его помощью.

Кстати, спасибо всем за ответы. Экскурс в Mate и Cairngorm расставил множество точек над "и", теперь осталось все полностью попробовать на практике. Сейчас, как уже и упоминал в вопросе выше, очень интересует аспект unit-тестирования того, что получается с помощью Mate.

Vasilio Ruzanni - 13 Сентябрь 2008 1:15

На мой взгляд автор вопроса недостаточно полно изложил задачу.
Кто пользователи.
Интернет или интрАнет.
Учитывая опыт (кстати какой, сколько, какая версия .Net) в С#, я бы не посоветовал прыгать с воду FLEX.
Сам нахожусь постоянно в той же ситуации. Внутренние сайтиы все на ASP.NET, максимум добавки на FLASH(включая AS3).
Несколько раз пытался прототип сделать на FLEX (3.0).
Если често было жутко неудобно все. Начиная от среды - перепробовал все законное и незаконное, кончая построением системы как таковой. Учитывая уровень знания AC3, средний -, достаточно тяжело было мириться с тормознутостью загрузки (после FLASH), достаточно диким Frameworkом - говорю только о стандартном. Справедливости ради, скажу что навесив на ASP.NET функционально тяжелые компоненты (Telerik & C) получались еще те тормоза.
Насчет Сильверлайта вопрос неоднозначный, да 2.0 Бета сыровата, да все еще сильно отличается от полного WPF, но попробовав на тестах последний был приятно поражен.
Да пока только под Windows, да загрузка похлеще флекса, но работает и очень очень шустро именно для DATA Entry приложений - большинство из тех что делается для внутренней сети. Плюс опять же что фирмы компонентые очень тянутся и к WPF, и к Silverlight.
Да анимация и 3д поддержка (в Flash Player 10), но посмотрите на http://bubblemark.com/ хотя для бизнес аппликации это и не так важно.


Олег - 14 Сентябрь 2008 2:25

А еще, если вам важна кросс-платформенность, обращаю внимание аудитории на то, что под линукс-системами во флекс-приложениях есть проблемы с кириллицей. Отображается она нормально, а вот ввод русских букв не работает... В поля вставляются зюквы. Решения мы пока так и не нашли.

Sergey - 14 Сентябрь 2008 8:12

Flex 4 выйдет не раньше чем через год, или "готовь сани летом" ?

Алексей - 1 Октябрь 2008 20:50

Re: Flex 4 выйдет не раньше чем через год, или "готовь сани летом" ?

Недавно где то проскальзывал аносик по этому поводу (к сожалению ссылочку не сохранил),
Но сроки указаны меньше года.

Садохов - 31 Октябрь 2008 11:41
Написать багрепорт:










Можно: a href target blockquote strike strong em code pre small img width height border


Запомнить тебя?






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

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

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

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

Ноя 2008: Как я делал свою первую игру, гвоздоноид, Leprosorium Tower Defence, весь Ноя

Окт 2008: Ура — вторая лицензия Alternativa3D уезжает в Киев!, Влещь на глагне III IIIIIII?, весь Окт

Сен 2008: Встречайте Open Source Flash Media Server — Mammoth, Срочно нужен толковый Flex-разработчик в Харькове (+Java), весь Сен

Авг 2008: Flex Gangsta Rap Video WTF Bro?, 27 сентября — встреча UAFPUG во Львове и плюшки от Adobe, весь Авг

Июл 2008: Тенденции среди работодателей: Adobe Flex, Adobe AIR, Silverlight, Спорт спасет красоту, которая спасет мир!, весь Июл

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





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