Parece que configuração programática ficou em voga esses tempos na comunidade Java. A razão não me é muito clara, afinal, todo bom framework deve permitir ser usado de tal forma, porém não de maneira restritiva. Posso ter a opinião viciada nesse caso, mas acredito que configuração deve possuir sua DSL própria e a parte programática tem sentido apenas quando seu uso automatiza novas tarefas ou, de alguma forma, melhora sua usabilidade pelos desenvolvedores.
O maior argumento contra utilizar arquivos de configuração nunca foi muito o formato, seja xml ou qualquer outro, mas sim a quantidade abusiva de informação necessária para satisfazer o framework. Convenhamos, boa parte do tempo vamos usar apenas um conjunto pequeno dos recursos oferecidos e de uma maneira comum. Essas funcionalidades e interações recorrentes, devem possuir uma notação mais sucinta – o configuração deve ser ser otimizada para o uso comum. Para esse comportamento temos por uso de valores padrão inteligentes.
Porem, pode ser feito ainda mais. Neste caso, o framework assume que uma série de interações e padrões de uso serão utilizados e o usuário apenas configura aquilo que for diferente. Por esta maneira de trabalho, temos aquilo que chamamos por configuração por convenção. Juntando com valores padrão inteligentes, configuração deixa de ser uma preocupação, um martírio, para ser apenas um detalhe do projeto – que é seu devido lugar.
Em um cenário como esse, existe valor em expor uma extensa camada programática de acesso à configuração? Pelo resultado encontrado em vários projetos, sim, definitivamente existe, mas longe de ser uma boa ferramenta para substituir os arquivos. Primeiro, acho importante definir quais tipos de configuração existe em um framework e como isso afeta o valor ao abrir as portas para demais programadores.
Temos a Configuração de Inicialização, que pode ser vista como uma receita de bolo, que depois de utilizada, é descartada. O Hibernate é um bom exemplo, a configuração informada é utilizada para construir a SessionFactory e depois jogada fora. Outra forma de configuração é o Repositório de Parâmetros, onde toda configuração é armazenada de maneira que possa ser consultada em tempo de execução, o exemplo aqui fica por conta do Struts2, que transforma toda sua configuração em um modelo de objetos que representam os elementos envolvidos no processamento de uma requisição.
Das utilidades para configuração programática, destaco transformação, pois é aplicável no caso de Configuração de Inicialização. Transformação, como o nome sugere, altera a configuração já existente em algo mais útil, como colocar todas collections com lazy-loading; ou a partir de dados externos cria novos elementos, por exemplo, mapeando automaticamente todo um pacote de classes.
Quando existe um repositório, as possibilidades são maiores, o mecanismo de transformação pode ser aplicado na inicialização ou durante a execução. Para estender o comportamento do repositório utilizasse normalmente o padrão de projeto Plugin, para a descoberta do interessado, caso sejam muito, utiliza-se Chain-of-Responsibility para coordenar as transformações. O Struts2 funciona desta forma, é possível contribuir plugins que são responsáveis por instanciar as actions ou recuperar o mapeamento de um path. É possivel, por exemplo, descobrir quais actions existem no sistema e criar o mapeamento automaticamente.
Configuração programática é muito útil, porém não deixa de ser apenas uma ferramenta e, como tal, não deve ser o principal valor que um framework tem a oferecer, pois, a rigor, não trata do problema proposto a ser resolvido. Um framework MVC, por exemplo, deve ter como valores auxiliar no desenvolvimento de sites, dos quais configuração não é uma benéfice, mas sim um ardor maior ou menor para seu usuário.
4 responses so far ↓
1 Fabio Kung // Apr 16, 2007 at 6:23 pm
Concordo plenamente!
Não me interessa muito como é feita a configuração. O ideal é que nem seja necessário configurar nada (ou muito pouco).
2 Luca Bastos // Apr 18, 2007 at 11:51 pm
O mal dos frameworks, inclusive o VRaptor, é que a maioria deles esquece que existe JMX.
Não gosto de configuração programática porque não me permite salvar a pole abrindo um putty com o servidor e trocar um parâmetro ou orientar o cara do suporte para fazer isto.
E também não gosto de Framework que faz configuração programática SEM fornecer recursos de JMX.
E antes que o Fábio fale de configuração por convenção que é uma coisa boa e está na moda, lembro que alguns especialistas em segurança recomendam configurações personalizadas. Por isto acho que é sempre bom que alguém na empresa entender como tudo é configurado sem deixar as coisas somente a cargo do framework.
3 ASOBrasil // Apr 23, 2007 at 9:12 am
Louds, concordo com sua opinião viciada!
Luca, concordo em termos com você. Acho que JMX seria uma opção interessante, mas quanto de tempo seria gasto para desenvolver esse benefício do framework e quanto desse seria realmente utilizando? Sendo que hoje em dia, existe opções para você acessar o servidor remotamente e fazer a configuração que precisar.
4 Luca Bastos // Apr 23, 2007 at 1:59 pm
ASOBrasil
Sem querer polemizar aqui na casa do Louds, mas é justamente para poder acessar o servidor remotamente para fazer a configuração que precisar é que não gosto de configuração programática, principalmente quando não se abre para JMX que é facílimo de disponibilizar em tempo muito menor do que você imagina.
Acho que assim que arranjar tempo vou blogar sobre como eu acho configuração programática coisa mais antiquada do que Clipper Autumn 86.
Leave a Comment