Miguel Alho

Templates T4

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.

Continuar a ler

Serialização e desserialização de Objectos em C#

Introdução

Num projecto recente, desenvolvi um sistema multi-tier em que alguns dados eram provenientes de ficheiros XML, e que também era necessário escrever dados para ficheiros em XML. Na definição dos objectos de negócio da aplicação, além das propriedades estavam incluídos dois métodos, ToXML() e FromXML(XmlNode), que convertiam os dados do objecto para XML ou recebia os dados em XML e preenchia o objecto com esses dados.

Inicialmente, os métodos de conversão de XML para objecto e de objecto para XML estavam incluídos na classe que definia o objecto, com a personalização necessária a classe. Esta abordagem era evidentemente má, especialmente quando o numero de classes em que é grande pois não permitia a reutilização do código. Com tempo foi possível desenvolver uma classe generalizada, que permite a serialização e deserialização em XML dos objectos das diversas aplicações que integram a classe, aumentando a eficiência de desenvolvimento.

O artigo que segue, apresenta a estrutura típica em que é usado, a classe XmlCustomSerializer que efectua a serialização e desserialização do objecto automaticamente, e um exemplo de como utilizá-lo.

Continuar a ler