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.
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.







