MVC 3.0 e o bom uso da “Convenção sobre Configuração”

Creio que foi em 2005 que li pela primeira vez num livro de Ruby on Rails o princípio de design chamado “Convention over Configuration” (CoC - ou “Convenção sobre Configuração”). Li, comprei, mas não pude comprar de todo a forma como foi utilizado no RoR ou, posteriormente, no ASP.Net MVC.

Por causa do CoC, estes frameworks utilizaram regras de nomenclaturas (convenções) para garantir a amarração entre classes, minimizando a necessidade de configuração.

Um exemplo simples: no ASP.Net MVC um Controler denominado PessoaControler fica por default amarrado com uma view “~/Views/Pessoa/Index.aspx”. Nenhum arquivo de config precisa reforçar isto.

Mas, como tudo na vida, isto tem um lado bom e um lado ruim.

O lado bom é que é ótimo não precisar de arquivos e configuração mapeando as classes do framework. O mapeamento por convenção é simples e legível.

O lado ruim é que por vezes precisamos de mudanças, ou simplesmente não obedecemos corretamente a nomenclatura (por exemplo, criamos uma View no diretório Pessoas, colocando um ´s´ a mais) e começamos a ter erros em tempo de execução. Outra implicação histórica é o excesso de uso de strings mágicos que começam a aparecer na API do framework (como no RedirectToAction do ASP.Net MVC).

Quando percebi isto em 2005, achei que parte do problema da implementação do CoC advinha principalmente da limitação de tipos do Ruby. Ruby é uma linguagem que não implementa tipos e usar uma convenção de nomenclatura é um grande apoio para minimizar erros. Quem programou em C usando prefixos como ´pt´ para indicar que tínhamos um ponteiro, ´h´ para handle, etc. sabe do que estou falando.

Quando o framework ASP.Net MVC foi criado achei curioso o uso de strings mágicos utilizados junto a linguagens fortemente tipadas como C# e VB.Net. Para mim, a tipagem forte seria suficiente para remover os erros em tempo de execução e trazê-los para o tempo de compilação – nada de strings mágicos passados como argumentos de métodos. Mas isto não aconteceu…

A boa notícia é que este tipo de facilidade está chegando no ASP.Net MVC 3.0. Para quem quiser dar uma olhada, sugiro assistir esta apresentação da MVCCONF (pena que é em inglês, mas creio que dá para entender o que está acontecendo no código apresentado).

Sempre apostei em linguagens fortemente tipadas para programas complexos. Prefiro sempre o erro em tempo de compilação ao erro em tempo de execução. Com a inferência de tipos podemos fazer isto com menor custo ainda.

Que bom que estamos conseguindo unir o CoC com tipagem forte. Vocês não acham?