e=Verdana size=2>

Clique aqui para ler todos os artigos desta edição

Boa Idéia

Code Generation

Gerando código automaticamente

 

Geração automática de código não é uma idéia nova, embora esse tema tenha ganhado destaque ultimamente. Aliás, sempre que ouvia falar sobre o assunto, sentia “arrepios”. Pensava em ferramentas de geração de códigos complexas, CASE ou que geravam código difícil de entender, mal-estruturado, pouco extensível e que escondiam seus detalhes de implementação. Enfim, acredito que eu tenha algum tipo de “trauma”, não sei ao certo.

Mas o que abordaremos aqui são ferramentas que podem aumentar a produtividade da equipe de desenvolvimento. Mudanças recentes na maneira como o software é construído podem ter contribuído para o ressurgimento de ferramentas geradoras de código, como uma maneira de automatizar a geração de código “braçal” e permitir ao desenvolvedor focar na lógica de negócio do sistema.

Quando eu falo “mudanças recentes na maneira de construir software”, estou me referindo ao lado arquitetural utilizado para construir uma aplicação atualmente, ou seja, a “quebra” em n-camadas, utilização de design patterns, melhores práticas, bibliotecas de apoio etc. A realidade é que, se por um lado o desenvolvedor está construindo aplicações melhor estruturadas, mais flexíveis com relação às mudanças de negócio e de tecnologia e menos acopladas, por outro lado existe um overhead na codificação.

Hoje, construímos aplicações com camadas de apresentação, fachadas, acesso a dados, Stored Procedures etc. Sem falar nas entidades, que podem ser utilizadas com a finalidade de passar dados entre as camadas. Ou seja, já cansa antes mesmo de começar o projeto! E quando o projeto termina, lá vamos nós novamente começando tudo de novo...

Enfim, o ciclo de desenvolvimento é realmente um processo penoso para o desenvolvedor. Mas afinal, computadores não têm a intenção de realizar tarefas repetitivas? É exatamente aí que entram as ferramentas geradoras de código.

 

Como funciona uma ferramenta geradora de código?

Basicamente, a ferramenta geradora de código recebe de um lado os metadados do projeto, como por exemplo, o modelo de dados, e de outro lado os padrões de projeto definidos pelo desenvolvedor, como por exemplo, bibliotecas ou comandos que devem ser utilizados, padrões para tratamento de erros, logging, acesso a dados etc., e a partir desses parâmetros o código é gerado.

Então, isso significa que a minha aplicação estará pronta? A resposta é infelizmente não (ou felizmente, senão não precisaríamos mais de desenvolvedores!). Não existe mágica. O papel do desenvolvedor é preencher os gaps que a ferramenta geradora de código deixa, ou seja, codificar o que não pode ser automatizado e que realmente deve ser o foco do esforço de desenvolvimento, que são as regras de negócios, aspectos funcionais da aplicação ou mesmo aspectos técnicos mais complexos.

Não estamos falando aqui da geração somente da “casca” da aplicação, como nome de classes e seus métodos. Estamos falando da geração efetiva de código para Stored Procedures, componentes que farão a chamada a essas, passando parâmetros e tudo mais, além da geração de classes que fazem o mapeamento entre o banco de dados relacional e o mundo Orientado a Objeto e também classes da camada de interface com o usuário.

 

My Generation

My Generation é uma ferramenta de geração de código free, que gera código a partir de templates. Os templates podem ser usados para gerar Stored Procedures, XML, HTML, páginas ASP.NET, componentes de acesso a dados, entidades, e outros. Você pode pensar em um template como um script, que você pode definir do zero ou a partir de um template já existente.

Os templates podem ser escritos em VBScript, JScript, C# e VB.NET.  As duas linguagens de script permitem acesso a objetos COM e as duas linguagens .NET têm acesso aos namespaces .NET. Template é uma maneira flexível de gerar código, ao contrário de wizard ou outras interfaces fixas que forçam a trabalhar de uma maneira específica.

O My Generation possui como principal entrada de dados os metadados do banco, ou seja, o modelo de dados. Ele suporta vários bancos de dados, como por exemplo: SQL Server, Access, Oracle, IBM DB2, MySQL (rodando em Windows), PostgreSQL, Firebird, InterBase, SQLite e VistaDB.

Além dos templates que são instalados por default, outros podem ser baixados diretamente do site (www.mygenerationsoftware.com). Além disso, você pode criar o seu próprio template, baseando-se em arquivos existentes, ou criando um a partir do zero. Isso é muito importante, pois permite que você produza código automatizado seguindo os padrões desejados pela sua empresa ou cliente.

Você poderia, por exemplo, na geração de Stored Procedures, adicionar cabeçalhos, comentários no código, comandos, utilizar um padrão de nomenclatura etc. Um outro exemplo seria na criação de classes de acesso a dados, onde poderia definir um template para utilizar uma determinada biblioteca, já definindo como deve ser feita a chamada às procedures (ou código sql ad-hoc), o tratamento de exceções, trace, transações etc.

Uma outra funcionalidade interessante, é que o My Generation possui uma arquitetura extensível, ou seja, você pode desenvolver o seu próprio plugin para fornecer algum tipo de serviço específico para os templates. Um plugin nada mais é do que uma classe .NET que deve implementar a interface IMyMetaPlugin.

 

Gerando um código de exemplo

Mostraremos a seguir um exemplo de como podemos gerar código utilizando o My Generation. O My Generation vem acompanhado de uma série de templates, para diferentes finalidades e arquiteturas de software.

O template que utilizaremos é o DAAB C# For Net 2.0 and EntLib January 2006 baixado diretamente do site da comunidade (www.mygenerationsoftware.com/TemplateLibrary/Templates) e é utilizado para gerar código utilizando a biblioteca Enterprise Library 2.0 da Microsoft, ou seja, você precisa instalar a biblioteca.

Ele possui scripts para a geração de Stored Procedures e classes para a chamada dessas. Porém, como já disse, você pode criar os seus próprios templates de acordo com a arquitetura definida por você ou utilizada na sua empresa. Baixe e copie o arquivo de template para a pasta C:\Arquivos de programas\MyGeneration\Templates\C#.

 

...

Quer ler esse conteúdo completo? Tenha acesso completo