quinta-feira, 28 de agosto de 2014

BeanMaker, Gerador de Código - Conceituação

Durante os últimos meses vinha amadurecendo a ideia de desenvolver uma ferramenta de geração de código que pudesse acelerar o desenvolvimento dos projetos em que estou envolvido. Resolvi, então, investir tempo na sua construção, com a firme esperança de recuperá-lo no projeto das minhas outras aplicações.

Esse tipo de ferramenta em que estou trabalhando é comumente chamado de "scaffolding". Existem vários para várias tecnologias. Só que o código gerado delas não me agradaram. Fora isso encontrei dificuldades para adaptá-las ao meu jeito de trabalhar.

Já que estava iniciando o projeto, optei por trabalhar com as tecnologias mais modernas em Java.

  • Java 8
  • Apache TomCat 8
  • JSF 2
  • JBOSS RichFaces 4.3.7
  • Eclipse Luna

Incluí os seguintes requisitos para o código gerado. Futuramente postarei justificativas para esses requisitos. São eles:

  • Multi Língua
  • Multi Database
  • Multi Browser
  • Horas no formato GMT

Idealizei o projeto do modelo de Dados (MER e diagrama de classes). Executei também uma prova de conceito que foi muito bem sucedida.

A premissa básica do projeto é que o código possa ser completamente gerado a partir do diagrama de classes, ou mais especificamente das propriedades de uma classe. Assim, dada uma classe hipotética "X", com duas propriedades "p1" e "p2", podemos gerar código (novas classes) completamente funcional para acessar o banco de dados (CRUD) para acessar colunas "p1" e "p2" da tabela "X", controle de transação, tela (view) e relatório básicos. O relacionamento entre as classes do modelo também permite tomar algumas decisões quanto a montagem da tela (view).

Para isso, estou usando anotações (annotations) de pacotes existentes e criando algumas anotações do projeto. Essas anotações governam o processo de criação do código. O assunto "anotações" merecerá uma postagem exclusiva em breve.

Exemplo do uso de anotações já existentes na JPA2 e seus impactos no código:

  • @NotNull: permite que a propriedade seja considerada obrigatória.
  • @NaturalId: permite que seja criada uma restrição de integridade de unicidade.
  • @Id: permite montar cláusulas de seleção bem definidas

Exemplo do uso de anotações criadas para o projeto:

  • @ViewStrategy: define como os relacionamentos (OneToMany, ManyToOne) serão representados na tela.
  • @ViewFieldSize(size=x maxLength=y): permite a definição do tamanho dos campos na tela.

Pretendo ter a primeira versão do projeto pronta já na próxima sexta-feira (5/9).

É minha intenção que o projeto seja comunitário e de código aberto.

Nenhum comentário:

Postar um comentário