Groovy + Grails

Desenvolver para WEB com Java nunca foi algo prazeroso, eu particularmente que sou oriundo de linguagens dinâmicas e de frameworks RoR like, nunca gostei de desenvolver com Java para WEB. Já tive a oportunidade de participar de projetos que utilizam frameworks como: Apache Beehive, Struts e Mentawaii. Assim como também tive a oportunidade de testar outros como: Wicket, Tapestry, Spring-MVC, etc. Desses, o que mais se aproximou de algo razoável foi o Spring-MVC, que parece nunca ser levado a sério pela própria SpringSource, que lançou a versão 3, mas nunca de forma realmente oficial, uma prova disso é que documentações a seu respeito são um tanto difíceis de serem achadas.

Quanto a Servlets (um mal necessário) e JSF (e suas N implementações), prefiro nem citar a minha opinião.

Paralelo a isso, aconteceu toda uma revolução na maneira de pensar em desenvolvimento para WEB com o lançamento do Ruby on Rails – framework WEB da linguagem Ruby – que foi um verdadeiro marco e que acabou impactando quase todas as outras linguagens, inclusive o próprio Java. A idéia do RoR é simples: facilitar, simplificar e tornar prazeroso o desenvolvimento para web. Seguir essa idéia sempre me pareceu uma boa opção.

Java como plataforma

Com todo esse advento dos novos frameworks WEB baseados no RoR e do crescimento de algumas linguagens como o próprio Ruby, Python e até linguagens de programação funcional, o Java, que já tem um estigma de ser uma linguagem complexa e que demora a evoluir, acabou perdendo força na comunidade como linguagem, mas em compensação passou a ser mais notada como plataforma, principalmente por causa do poder da JVM e das possibilidades que a mesma trás, com isso alguns projetos interessantes como Jython e JRuby surgiram e esses projetos nada mais são do que outras linguagens rodando em cima da JVM, ou seja, é possível desenvolver código Python e no final o mesmo virar byte-code e ser executado pela JVM.

E é nesse ponto que eu quero chegar, o assunto do próximo tópico.

Groovy

Groovy é uma nova linguagem, que roda em cima da JVM e que foi pensada de uma forma para ser dinâmica, simples e enxuta e ainda com a vantagem de poder se usar as API’s do Java.

Fora isso, foram criadas API’s específicas do próprio Groovy que facilitam muito o uso de alguns recursos/api’s do Java, como: coleções, mapas, strings, arquivos, etc.

A grande diferença do Groovy para o Java, é que o Groovy é uma linguagem de tipagem dinâmica, o que inicialmente pode ser um perigo para programadores habituados com Java, mas depois desse “trauma” inicial, a linguagem se mostra extremamente poderosa através de recursos como a possibilidade de se definir DSL’s.

Outra possibilidade interessante, é que é possível construir scripts com a linguagem Groovy, o que é uma verdadeira mão na roda para criação de rotinas de automatização, builds, etc.

Grails

Grails é um framework Groovy para WEB baseado no RoR e que tenta resolver todos os problemas já citados da burocracia de se desenvolver para WEB com Java.

Dentro do “pacotão” do Grails, já vem embutidos recursos como: injeção de dependência, mapeamento objeto relacional, segurança, testes (unitários e funcionais), validações, etc. Além do que, o framework é completamente focado em uma abordagem rich domain, diferentemente de outros frameworks.

Outro recurso muito interessante são os plugins, que são como mini-aplicações que podem ser instaladas dentro do Grails de acordo com a sua necessidade. Atualmente existem muitos plugins disponíveis no repositório do Grails e que atendem as mais variadas necessidades.

O framework é todo baseado em convenções e dispensa o uso de complexos arquivos XML para fins de configurações, o que no final das contas acaba sendo mais um fator para facilitar e agilizar o desenvolvimento, pois dessa maneira a equipe de desenvolvimento acaba ficando focada no que realmente interessa, que são os requisitos de negócio.

Porque escolhi Groovy+Grails

Antes de mais nada, escolhi por todos os motivos apresentados anteriormente, talvez até não tivesse toda essa visibilidade no começo do projeto, mas como o projeto novo não apresentava desafios muito grandes e ao mesmo tempo não era tão crítico, pensei que uma boa maneira em deixar minha equipe motivada seria investir em uma nova tecnologia.

Fora o fato, que como a equipe tinha experiência com Java, na pior das hipóteses, no caso da não adaptação da equipe com o Groovy, poderíamos usar códigos Java dentro do projeto, já que a linguagem permite isso, ou seja, foi um risco, mas um risco controlado e calculado.

Outro fator que contou muito para escolha dessa dobradinha, foi que passamos a adotar uma abordagem mais ágil e interativa com a presença mais próxima do cliente junto ao time de desenvolvimento e isso significava que deveríamos ter algo entregável toda semana, que foi a periodicidade que definimos para as nossas iterações. A adoção do Groovy e Grails agilizaria nosso tempo de desenvolvimento, consequentemente conseguiríamos produzir mais features em menos tempo, que era exatamente o que estavámos buscando.

Qual tem sido a minha experiência

A melhor possível. Quando eu digo a melhor possível, é porque tem sido melhor que o esperado, mas obviamente, como tudo na vida, tem seus prós e contras.

Um dos pontos positivos, foi que a curva de aprendizado foi bem menor do que o esperado, ou seja, a equipe entrou no “ritmo” do framework bem rápido.

Outro ponto positivo, é a abordagem do framework de ser realmente orientado a objetos, favorecendo uso de uma modelagem focada em domínio rico e testes. Para toda entidade, service, ou controller novos criados, automaticamente um teste já é criado, ou seja, isso torna claro para o desenvolvedor, que seguindo os conceitos do TDD, o mais aconselhável é que os testes sejam criados antes da implementação, pois só dessa maneira o design do seu código será influenciado para se tornar mais coeso, menos acoplado e com as camadas bem definidas de acordo com a sua responsabilidade dentro do contexto.

Como o framework é full-stack e baseado em convenções, configurar um projeto e rodar tem o custo quase zero, ou seja, muito pouco tempo é disperdiçado.

Como nem tudo são flores, tivemos um impacto inicial com a curva de aprendizado de uma linguagem dinâmica (para quem não tinha prática com isso), fora os novos conceitos do próprio framework. Mas volto a repetir: o impacto foi menor que o previsto. Para resolver esse tipo de problema, adotamos algumas medidas como: pair programming e um grupo de estudo interno para troca de conhecimento, onde cada um deveria mostrar algum tópico em que já tivesse mais avançado, para o restante.

Outro impacto que tivemos foram de algumas peculiaridades do framework, que apesar de ser muito bom, ainda apresenta alguns pequenos bugs (e até manhas) que demoram a serem notados. Como o framework está em evolução e ainda em versão 1.*, é normal que esteja um pouco imaturo, portanto não o recomendaria ainda para um projeto mais complexo e crítico.

IDE’s ainda são um problema quando se pensa em Groovy + Grails, na verdade, existe uma IDE muito boa, mas que é paga e não é o Eclipse, IDE no qual a maioria dos desenvolvedores Java já está acostumada. Essa IDE é o Intellij da Jet Brains, no qual já testei e realmente é a melhor opção no mercado.

Conclusão

Recomendaria Groovy+Grails se você tem uma visão semelhante a minha sobre desenvolvimento para WEB com Java e também se você tiver a oportunidade de usá-los em algum projeto sem muita criticidade e complexidade (apesar de existirem alguns cases), mas é importante mensurar sempre os riscos da adoção de algo novo, pois no final isso pode ser irreversível.

Java, Tecnologia, Software & Desenvolvimento

Se você gostou desse tópico, por favor considere deixar um comentário ou se inscreva no feed e tenha no futuro todos os tópicos entregues diretamente no seu agregador.

Deixe seu Comentário

(obrigatório)

(obrigatório)