Neste post, James Ward da Adobe juntou-se novamente com a InfoQ.com para trazer até você outro Flex Top 10 (nosso mais recente Flex Top 10). Flex é um framework de desenvolvimento de aplicações open source para a construção de aplicações ricas de Internet que rodam na web com o Flash Player, ou no desktop com o Adobe AIR. Acima de tudo, Flex é um framework poderoso que é fácil de utilizar, mas hoje vamos focar em alguns dos erros mais comuns cometidos ao se desenvolver aplicações Flex.
Para aqueles que são novos em Flex, verifiquem no InfoQ o recente Adobe Flex Básico para ter uma introdução rápida ao framework. Aqui está a lista:
- Utilizar um framework RIA para construir aplicações Web 1.0 (aka. Nova tecnologia para a mesma velha coisa).
- Quebrando experiências de navegadores padrão.
- Diminuindo o desempenho da aplicação com o uso de muitos containers.
- Diminuindo o desempenho da aplicação utilizando XML para transferência de dados sobre protocolos otimizados.
- Tentar contratar desenvolvedores Flex.
- Uso excessivo de animações
- Não configurar um ecossistema corporativo.
- Não utilizar o framework por inteiro.
- Baixando o desempenho do DataGrid com renderizadores complexos.
- Não se Preparar para Aplicações Offline.
Um dos maiores desafios ao mudar de aplicações Web 1.0 para o paradigma de desenvolvimento de RIAs é aprender a pensar diferente. Flex dá ao desenvolvedor uma biblioteca de componentes avançada que permite fazer coisas que simplesmente não eram possíveis há poucos anos atrás. Geralmente, o poder do Flex é perdido, e o framework é utilizado para implementar aplicações Web 1.0 tradicionais.
Construir aplicações Web 2.0 é mais que refresh parcial de página e cantos arredondados. Por exemplo, desenvolvedores Flex deveriam utilizar vetores para fornecer aos usuários um entendimento visual do dado, e controles avançados para o fluxo de uma aplicação rica. Stephan Janssen discutiu este esforço recentemente com a InfoQ.com:
Como um desenvolvedor Java, aprender ActionScript Orientado a Objeto e a linguagem de marcação de UI é realmente uma baba no quiabo. O desafio, entretanto, para os desenvolvedores (Java) é que nós não somos designers, e com tecnologias RIA estas duas habilidades são muito necessárias.
Enquanto Flex fornece uma plataforma excelente para melhorar a experiência do usuário, ainda é importante manter a familiaridade de coisas como o botão voltar, favoritos e auto complete.
Flex 3 inclui novas funcionalidades de Deep Linking para suporte do botão voltar e de book marketing. Você pode aprender mais em labs.adobe.com. Existe um bom número de componentes lá para implementar auto complete. A partir do Adobe Exchange, você pode utilizar o componente AutoComplete Input.
Flash Player utiliza um gráfico de objetos de exibição hierárquica, similar ao Document Object Model (DOM) do HTML. Os containers mais profundos vão sendo aninhados conforme é feita a renderização. No Adobe Flex Developer Center existe um artigo que cobre as melhores práticas relacionadas ao desempenho do Flex, incluindo o uso de containers em detalhe:
O maior perigo de desempenho do Flex é cair na tentação de utilizar os containers randomicamente. Aninhar profundamente muitos containers prejudica o desempenho da sua aplicação. Esse é o número um dos perigos de performance aos quais os desenvolvedores Flex sucumbem—e ainda bem que ele é 100 por cento evitável.
Flex oferece aos desenvolvedores várias opções para transferência de dados entre a aplicação cliente Flex e o servidor, incluindo AMF3, XML, SOAP, e requisições HTTP diretas. Ward demonstrou o uso destas tecnologias e comparações de performance em sua aplicação de Censo.
BlazeDS deveria ser considerado para projetos de backend sem comprometimento com legado usando Java. BlazeDS é um produto Data Service que recentemente teve o código aberto e que usa o protocolo AMF3. AMF é um protocolo de transferência binária que é fácil de integrar com Java, e que oferece ganhos de desempenho sobre XML significativos. Existem implementações open source de AMF para cada grande tecnologia de backend.
Se BlazeDS não é uma opção, Hessian poderia ser uma opção. Hessian oferece suporte ActionScript/Flex para seu protocolo de web services binário.
Desenvolvedores Flex experientes são muito difíceis de encontrar no momento atual. Flex está no ponto da curva de adoção como o Java estava no final da década de noventa. A demanda por desenvolvedores Flex está excedendo a oferta. Isto torna difícil encontrar desenvolvedores Flex experientes. Isto, entretanto, cria uma grande oportunidade para desenvolvedores Java de expandir seus conjuntos de habilidade e trabalhar com uma tecnologia emergente divertida. Muitas empresas que procuram por desenvolvedores Flex têm tido grande sucesso treinando desenvolvedores Java ou outros desenvolvedores de aplicação web em somente algumas semanas em Flex . A linguagem e as APIs são facilmente aprendidas por desenvolvedores que são familiarizados com web e programação GUI.
Utilizar Flash como o ambiente de execução permite aos desenvolvedores facilmente adicionar animações e efeitos. Entretanto, desenvolvedores devem ter certeza de que a animação tem um significado e que fornece um contexto. De outra maneira, elas irão aborrecer os usuários. O timing das animações é importante também. Designers de interação podem ajudar a fazer recomendações quando as animações devem e não devem ser usadas. Designers de interação podem também recomendar os melhores tipos de animação, a duração e a melhor função para easing.
Tem um bom post sobre o uso de animações em laair.org:
A maioria das animações são simplesmente MUITO LONGAS. Elas são longas, e lentas, e chatas, e excessivas. Pode parar. Uma coisa que descobri é que odeio esperar por animações estúpidas finalizarem para que eu possa fazer alguma coisa.
Não me leve a mal, eu não estou condenando as animações. Eu estou simplesmente condenando animações que são simplesmente muito longas ou muito extravagantes para seus propósitos. Toda animação pode ser reduzida a seu propósito. Imagine o propósito da sua animação e desenvolva de acordo.
Assim como outros projetos de software, é importante configurar um ecossistema corporativo para suas aplicações Flex.
Test Driven Development (TDD) é uma prática comum na maioria dos projetos corporativos atualmente. Para Flex, o framework FlexUnit está disponível para codificar testes unitários. Na Adobe Developer Connection, Neil Webb discutiu sobre TDD para desenvolvedores Flex e como utilizar FlexUnit. Além disso, Flexcover está disponível para relatórios sobre cobertura de código.
Integração Contínua (IC) é uma prática comprovada para a construção coesa de aplicações quando múltiplos desenvolvedores estão contribuindo. Similar a aplicações Java, plugins tanto para Ant quanto para Maven estão disponíveis para builds para IC de suas aplicações Flex.
Existe um grande número de funcionalidades opcionais disponíveis em Adobe Flex que você deveria considerar utilizar em suas aplicações. Por exemplo, Runtime Shared Libraries (RSL) está disponível para reduzir o tamanho de suas aplicações:
Você pode comprimir o tamanho do arquivo SWF resultante de suas aplicações colocando recursos compartilhados em arquivos standalone que podem ser baixados separadamente e guardados em cache no cliente. Múltiplas aplicações Flex podem carregar estes recursos compartilhados em tempo de execução, mas cada cliente precisa efetuar o download destes recursos apenas uma vez. Estes arquivos compartilhados são chamados de Runtime Shared Libraries.Outra funcionalidade pouco utilizada do framework são as funcionalidades de acessibilidade adicionais. Você pode ler mais a respeito das funcionalidades de acessibilidade do Flex no livedocs da Adobe. Em adição a opção de acessibilidade, o framework fornece funcionalidades adicionais para localização. Para saber mais sobre as últimas funcionalidades do framework Flex 3, verifique a página de introdução Iniciando com Adobe.
O excepcional itemRenderer para o DataGrid é muito otimizado. O erro #3 discutiu os impactos de desempenho de containers profundamente aninhados. Um dos lugares no Flex onde os containers podem facilmente ser aninhados é nos item renderers do DataGrid. O número de item renderers que são renderizados pelo DataGrid é o número de linhas visíveis vezes o numero de colunas visíveis. DataGrid customizado e item renderers de List deveriam ser muito otimizados. Quando lógica de layout complexa é necessária em um item renderer, é melhor utilizar UIComponent (ou outras classes mais baixo-nível) e posicionar o conteúdo para aquela célula manualmente.
O modelo tradicional para RIAs está no navegador. Entretanto tecnologias como Adobe AIR e Google Gears estão permitindo que estas aplicações rodem offline. Por não se preparar com uma arquitetura offline em potencial quando os usuários demandam, modificar suas aplicações para suportar funcionalidades offline pode ser muito difícil. Tipicamente, em aplicações web a lógica de negócio fica no servidor. Em RIAs offline, a lógica de negócio deve transitar para o cliente. Isto torna necessário montar uma arquitetura a frente do tempo onde certa lógica de negócio vai precisar existir para que as aplicações funcionem tanto offline quanto online.
Para aprender mais verifique outros conteúdos sobre Flex na InfoQ.com.