quinta-feira, 3 de julho de 2008

Next-Generation frameworks

Hoje em dia tanto se houve falar dos "Next-Generation frameworks" (também chamados de "lightweight frameworks") e como eles se diferenciam dos "antigos" (taxados de "heavyweight"). Esses frameworks antigos, caracterizados por utilizarem diversos arquivos XML de configuração, possuem uma estrutura extremamente robusta que causa um nível de baixa produtividade às equipes de desenvolvimento. Por esse motivo, os novos frameworks surgem com o intuito de extinguir os arquivos de configuração (properties ou XMLs) e trazer essas configurações, quando realmente necessárias, para dentro do código Java. Com o surgimento das Anotações no Java 5, conceitos como Inversão de Controle, Injeção de Dependências e Convensões sobre Configurações estão sendo amplamente usados, e isso de fato diminui o grau de dependências e aumenta o nível de entendimento do código. Porém, na minha visão, é nesse momento que alguns frameworks estão cometendo um novo erro: certas configurações devem mesmo estar no código Java? Qual o real motivo disso? Modismo? Empolgação? Ódio de XML ou Properties?
Surgiu a motivação para escrever este post logo após fazer um estudo (ainda não muito aprofundado) do framework de Injeção de Dependências do Google chamado Guice (se lê: Juice). Trata-se de um framework muito interessante, simplifica diversas tarefas em relação ao seu "concorrente" Spring IoC. O problema dele é justamente na configuração que faz o bind das interfaces e implementações. O Guice tem o conceito de Modules, onde para se criar um módulo deve-se HERDAR uma classe chamada AbstractModule e sobrescrever o método configure. Esses módulos são classes Java que fazem a configuração de forma programática dos binds. Na minha visão, dois problemas surgem nesse conceito de módulo do Guice. O primeiro deles é o fato de ter que herdar de uma classe que não é sua, nem sabemos como ela é implementada. Herança é algo que deve ser evitada ao máximo! O segundo é em relação à configuração que é feita em código Java e de forma bem extensa. Se esses módulos fossem configurados em XML por exemplo, muita abstração seria proporcionada e o código Java seria limpo.

Guice video introduction: http://crazybob.org/2007/06/introduction-to-guice-video-redux.html

Só uma pequena discussão. ;D
Até.

Nenhum comentário: