Introdução
Uma das áreas que me tem interessado e motivado mais nos últimos tempos, é a de geração automática de código, especialmente aplicado a frameworks aplicacionais. Depois de passar horas a escrever código à “moda antiga”, a escrever o mesmo tipo de código constantemente, a ideia de poder gerar automaticamente o código é sem dúvida entusiasmante. E torna-se ainda mais interessante se poder gerar uma estrutura de domínio completa a partir de um pequeno bloco de informação – uma framework que reduz o tempo de desenvolver código tediante. Não me refiro a código que uma melhor estrutura de objectos e hierarquias de herança resolva: refiro-me a objectos que apenas varia nos nomes da classe ou dos campos ou tipo de dados, e que Generics (ou equivalente) não resolvem completamente.
Há várias formas de poder gerar o código de forma automática. É necessário pelo menos um conjunto de metadados (que descreve os objectos do nosso domínio) e um processador para transformar essa informação. O conjunto de metadados pode ser XML, estrutura ou dados de bases de dados, ou um simples ficheiro texto devidamente formatado. É conveniente que os dados sejam estruturados para maximizar as potencialidades. Se o processador se basear em templates, basta aplicar um ou mais templates para transformar os metadados em ficheiros com código funcional. E podemos evoluir as saídas de forma dinâmica. Qualquer alteração a um template altera todos os objectos criados: qualquer bug genérico introduzido num template é corrigido em todos os objectos criados.