A questão da experiência do usuário (UX) tem se tornado cada vez mais importante no desenvolvimento de aplicações, em especial no mundo das aplicações móveis, em função das limitações físicas dos dispositivos, e das especificidades de cada plataforma. Idealmente, desenvolver uma aplicação nativa para cada plataforma seria a melhor solução, pois pode-se assim entregar ao usuário a melhor experiência de acordo com os padrões definidos para o seu dispositivo. No entanto, isto implicaria em um alto investimento em desenvolvimento. Neste instante, passamos a pensar em alternativas para reduzir este investimento.
Calatrava é um framework que se apresenta como uma destas alternativas (ao menos quando se pensa em iOS, Android e Web Mobile). Diferente de outros “cross platform frameworks” como PhoneGap que substitui o poder das interfaces nativas por interfaces web, Calatrava permite que você desenvolva a lógica de sua aplicação em JavaScript, e então a compartilhe entre as diversas plataformas.
Para tanto este framework faz uso da separação entre a camada de apresentação e a lógica do domínio. Calatrava define o conceito de Page, que corresponde à uma tela ou página de sua app. Em uma aplicação para iOS uma Page é implementada por uma ViewController, em Android por uma Activity, e para Web Mobile por um trecho de Haml e CoffeeScript.
Uma Page emite eventos que são processados por controllers, que implementam a lógica de sua aplicação em JavaScript. Estes controllers são executados em um interpretador JavaScript embarcado na aplicação nativa. Calatrava então provê uma bridge nativa, que faz a orquestração entre as pages e os controllers.
Esta estratégia permite ainda uma estratégia de desenvolvimento evolutivo: desenvolva inicialmente sua aplicação para Web Mobile e então utilize a interface web implementada nas aplicações iOS e Android. Para tanto, basta que em iOS as pages sejam implementadas por extensões de WebViewController, e em Android por extensões de WebViewActivity. A partir disto, pode-se evoluir as aplicações nativas iOS e Android uma page de cada vez, iniciando-se por aquelas que mais se beneficiariam com os elementos nativos.
O projeto é recente, e tem ainda muito a caminhar. Atualmente, a maior deficiência desta plataforma está no restrito número de plugins para integração de elementos nativos com o código de negócio. No entanto, o código é aberto, o que permite que qualquer um colabore para sua evolução, e por isto acredito que em breve esta plataforma estará em um nível de maturidade comparável ao PhoneGap, por exemplo.