Olá, meu nome é Filipe e vou falar sobre minha experiência de transição para a plataforma Flex utilizando remoting com Java.
Sou desenvolvedor há quatro anos, trabalhando principalmente com Java para web, mas também com sólida experiência com desenvolvimento de aplicativos desktop.
Após estudar algumas apostilas de Flex resolvi criar uma pequena aplicação Todo. A aplicação possui apenas 4 telas:
Achei o desenvolvimento com o Flex bastante natural, dada minha experiência com Swing, XUL e Laszlo. Do Swing aproveitei a forma como se trata e trafega dados entre o servidor e o cliente - nada de HTTP e Strings para lá e para cá. Portanto já estava acostumado a esta forma de pensar soluções.
Do XUL e Laszlo aproveitei a forma como a interface é declarada com databinding e datasources - consideravelmente diferente de HTML. Portanto também já estava acostumado a resolver problemas com estas ferramentas.
O desenvolvimento de interfaces com Flex brilhou para mim com as features de transições, efeitos e, principalmente, estados. São ferramentas que não vi aplicadas desta forma transparente em nenhuma outra tecnologia, e realmente facilitam o desenvolvimento de uma aplicação mais suave, bem como melhoram em muito a experiência do usuário final. O esforço para criar uma aplicação bonita e leve é centenas de vezes menor utilizando Flex do que utilizando Swing/SWT/Thinlet ou HTML + Milhares de Linhas de Javascript.
Uma conclusão interessante é que o MXML junta o melhor dos mundos web e desktop. Da parte web a tecnologia provê a facilidade de distribuição do software e de programar as interfaces utilizando uma linguagem de marcação, que é muito mais simples que código Java.
Da parte desktop a tecnologia herda a adequação, riqueza e customização - é uma linguagem feita para produzir interfaces de aplicações, não são necessárias "gambiarras", muito menos código de compatibilidade, pois o runtime é sempre o mesmo. Como disse Bruce Eckel em seu mais recente artigo, The Web Is A Mess. E o Flex existe para resolver este problema.
A parte de remoting é extremamente simples e transparente. Há uma enorme diferença entre o desenvolvimento com RPC e HTTP puro. Não ter que lidar com as incompatibilidades entre os browsers ou centenas de linhas de código Java promove um desenvolvimento mais voltado para a aplicação em si.
Me senti um pouco desconfortável sendo obrigado a declarar getters e setters públicos nos VOs em Java, mas sendo que estes objetos servem apenas como "comidinha de rede" e não participam dos objetos de domínio da aplicação, não é um problema ter que quebrar o encapsulamento deles.
ActionScript 3.0 é uma linguagem poderosa e, pela pouca experiência que tive, percebi que faz o trabalho de qualquer outra linguagem de programação de quarta geração. Contudo, senti falta de sobrecarga de métodos.
A título de aprendizado, resolvi não utilizar o Cairngorm para entender melhor os problemas que este framework resolve. Apesar da aplicação ser minúscula, me encontrei gastando tempo procurando qual tela possuía os métodos chamados por outra e também dificuldades para padronizar as chamadas remotas. Conclusão óbvia: é necessário um padrão de desenvolvimento que promova, entre outras coisas, a separação das soluções para os problemas comuns.
Em conclusão, a transição para o Flex foi suave, rápida, simples e interessante - como a plataforma. Recomendo que qualquer desenvolvedor Java, independente da experiência passada, dê uma chance à plataforma e pare de ganhar cabelos brancos tentando fazer seu HTML funcionar em todos os browsers ou fazer uma interface em Swing que não faça o usuário torcer o nariz.