domingo, 5 de janeiro de 2014

Geradores de Código em Java - Otimize seu tempo, Economize Dinheiro e Melhore sua Qualidade - Parte 3

ESTRUTURA DO PROCESSO DE GERAÇÃO



O seguinte fluxo é determinado neste processo de geração. O programa gerador busca as informações contidas na base de dados, carrega uma série de classes, mescla estas classes com os templates definidos na empresa e gera os arquivos de saída. Isto torna o gerador independente de tecnologia, pois os templates são definidos pela empresa ou mesmo uma equipe dentro da empresa. As classes carregadas são informações sobre todas as tabelas, relacionamentos e metainformações. A partir dos métodos destas classes é possível criar templates de acordo com a tecnologia da equipe/empresa de modo simples e rápido.

 Ilustração 2: Esquema Processo de Geração

Detalhamento do Processo do Geração


O gerador utiliza a tecnologia java DatabaseMetaData, esta tecnologia acessa a estrutura de tabelas de vários bancos de dados independentemente de tecnologia, para obter de forma independente as informações da estrutura da base de dados relacional, inclusive os comentários que possuem metainformações para enriquecer a geração.
Para criar independência entre equipes, o sistema possui uma separação em pastas para que cada equipe possa criar seus templates, permitindo customização mesmo dentro de uma única empresa.
No Tribunal de Justiça do Estado do Paraná, foi criado três pastas, como ilustrado na figura abaixo. A pasta padrao_criminal obedece o padrão da equipe que cuida dos sistemas criminais, pasta padrao_projudi pertence ao sistemas cíveis e o pasta novos_projetos são para novos projetos dentro do Tribunal.
Além disso, podem ser criadas quantas pastas forem necessárias, de acordo com as especificidades de tecnologias de sua empresa/equipe.
Para que se faça a geração, é necessário que se informe os seguintes parâmetros:
 Ilustração 3: Pasta de Templates
  • Lista de Tabelas – nomes das tabelas que serão geradas;
  • Pasta da Geração – nome do diretório onde será salvo os arquivos gerados;
  • URL – URL de conexão do banco de dados. Exemplo: jdbc:postgresql://postgres-dev:5432/evep;
  • Usuário do Banco – usuário de conexão com o banco de dados
  • Senha – senha de conexão com o banco de dados;
  • Driver – driver do banco de dados
  • Esquema – esquema onde a base de dados foi criado
  • Pasta do Template – como explicado acima, qual conjunto de templates serão utilizados
  • Novo Projeto – indica se o projeto é novo ou não. Quando o sistema é novo, além das classes geradas ele monta um ambiente completo para que o sistema rode sem problemas.
  • Alterar arquivos de configuração – indica que o gerador pode alterar diretamente todos os arquivos de configuração.
Boa parte dos parâmetros são necessários apenas para se ter uma conexão com o banco de dados, senão seria bem menor o número de parâmetros, o que torna bem fácil o uso do gerador, que é a característica “Facilidade de utilização” definidas por Ambler (AMBLER, 2002. pag. 113) .

 Ilustração 4: Parâmetros de Entrada

O gerador com base nestes parâmetros, obtém as informações da base de dados e carrega a estrutura de classes mostrada abaixo. Depois que isto ocorre, usando a tecnologia velocity é possível mesclar o template com os objetos carregados. Dentro do template pode-se acessar várias informações, entre elas:
  • Nome da tabela - através do método entity.getTableName();
  • Nome da classe Java – através do método entity.getClassName();
  • Nome do título da tela – através do método entity.getViewName();
  • Se a coluna é chave estrangeira – através do método attribute.isForeignKey();
  • O domínio de uma coluna – através do método attribute.getListOption();
  • O tamanho do campo – através do método attribute.getLength();
  • Se a coluna fará parte do relatório – através do método attribute.isReport();
  • Se a coluna não é um campo obrigatório – através do método attribute.isAllowNull();
  • O nome da classe que está relacionada com a coluna chave estrangeira – attribute.getForeignKey().getEntityPk().getClassName();
  • O atributo que representa a classe, ou seja, aquela que é apresentada em uma comboentity.getLookupAttribute()


Nenhum comentário:

Postar um comentário