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