| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/09/2009 17:07:18
|
legionarioba
JavaTeenager
![[Avatar]](/images/avatar/d58072be2820e8682c0a27c0518e805e.jpg)
Membro desde: 24/03/2003 00:40:42
Mensagens: 171
Localização: Salvador
Offline
|
Boa tarde PessoALL,
Estou trabalhando em uma aplicação multi-modular, com uma estrutura relativamente complexa, e estou configurando o comportamento transacional através de Spring AOP. Gostaria de, no meu processo de integração contínua( e desenvolvimento no Eclipse também), fiscalizar que os nomes dos métodos utilizados em um determinado package (br.corporacao.*.services.*), sigam determinada nomenclatura, pra que eu possa garantir que o comportamento transacional irá funcionar com corretude(sem ter que esperar assertividade precisa dos desenvolvedores da equipe, e garantindo o comportamento em todos os módulos do sistema). Existe alguma ferramenta capaz de executar tal tarefa?
|
http://silvioluiz.wordpress.com
 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/09/2009 17:17:28
|
enantiomero
JavaEvangelist
Membro desde: 23/04/2008 09:44:26
Mensagens: 304
Offline
|
Que tipo de nomenclatura? Talvez você possa escrever uma regra para o ou para o PMD ( http://pmd.sourceforge.net/integrations.html ) ou para o CheckStyle ( http://eclipse-cs.sourceforge.net/ ).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/09/2009 17:28:36
|
legionarioba
JavaTeenager
![[Avatar]](/images/avatar/d58072be2820e8682c0a27c0518e805e.jpg)
Membro desde: 24/03/2003 00:40:42
Mensagens: 171
Localização: Salvador
Offline
|
Não, os dois não se aplicam a meu caso...
O que quero é algo como nesse exemplo:
Método transacional : gravarUsuario, gravarPolitica, (gravar*)
Método leitura : obterUsuarios, obterPoliticas, obter*
Eu quero validar que meus métodos estão seguindo tais regras...
|
http://silvioluiz.wordpress.com
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/09/2009 18:01:12
|
pablosaraiva
JavaGuru
Membro desde: 27/03/2009 17:08:37
Mensagens: 243
Offline
|
Minha sugestão é criar uma ferramenta que vai varrer seu código fonte OU buscar o nome dos métodos através de reflexão.
Após isso, aplicar expressões regulares.
|
Existem 10 tipos de pessoas no mundo. As que conhecem binário e as que não. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/09/2009 18:06:03
|
legionarioba
JavaTeenager
![[Avatar]](/images/avatar/d58072be2820e8682c0a27c0518e805e.jpg)
Membro desde: 24/03/2003 00:40:42
Mensagens: 171
Localização: Salvador
Offline
|
Pablo,
Eu sei o que eu teria que fazer, em tese tive o mesmo pensamento dessa sua sugestão, a questão é, já existe alguma ferramenta que faça esse tipo de trabalho? Porque PMD, CheckStyle partem de definições inerentes aos mesmos, e inspecionam os fontes(seja via plugin no Eclipse, seja via Hudson, Maven). Gostaria de algo parecido, mas para o cenário que citei..
|
http://silvioluiz.wordpress.com
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/09/2009 18:10:20
|
enantiomero
JavaEvangelist
Membro desde: 23/04/2008 09:44:26
Mensagens: 304
Offline
|
legionarioba wrote:Não, os dois não se aplicam a meu caso...
O que quero é algo como nesse exemplo:
Método transacional : gravarUsuario, gravarPolitica, (gravar*)
Método leitura : obterUsuarios, obterPoliticas, obter*
Eu quero validar que meus métodos estão seguindo tais regras...
Hum... como é que um programa sabe, lendo seus programas-fontes, que um método é de atualização ou de consulta? Você precisa criar uma regra, já que não sei se você usa Hibernate, se usa JDBC puro etc.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/09/2009 18:14:13
|
legionarioba
JavaTeenager
![[Avatar]](/images/avatar/d58072be2820e8682c0a27c0518e805e.jpg)
Membro desde: 24/03/2003 00:40:42
Mensagens: 171
Localização: Salvador
Offline
|
Em meu caso seria uma regularExpression mesmo. Eu não teria como validar que uma regular expression obter* garanta comportamento apenas de leitura , e gravar* seja transacional. Mas se eu pelo menos pudesse validar que nas classes desse pacote, tivessem apenas assinatura dos dois tipos, ao menos conseguiria cobrir os casos em que o padrão fugiria dos dois. Não quero definir um padrão assim:
transacional: gravar*
leitura : *
entendeu? Ao menos isso já me daria garantia de evitar que métodos estivessem fora de um dos dois padrões ....
|
http://silvioluiz.wordpress.com
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/09/2009 18:17:17
|
pablosaraiva
JavaGuru
Membro desde: 27/03/2009 17:08:37
Mensagens: 243
Offline
|
Na verdade o código validador não precisa saber se o método é de leitura, gravação ou qualquer outra coisa.
Ele seria um classificador.
Pega o método A. Começa por gravar? O restante da nomenclatura está correta? Classifica como gravação.
Pega o método B. Começa por obter? O restante da nomenclatura está correta? Classifica como leitura.
Pega o método C. Começa por get? Exibe um alerta mostrando que o método está fora da nomenclatura do projeto.
(Desculpe, mensagem enviada antes de ver a mensagem anterior. Vou manter só por motivos históricos)
This message was edited 1 time. Last update was at 18/09/2009 18:18:21
|
Existem 10 tipos de pessoas no mundo. As que conhecem binário e as que não. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/09/2009 18:25:03
|
enantiomero
JavaEvangelist
Membro desde: 23/04/2008 09:44:26
Mensagens: 304
Offline
|
http://pmd.sourceforge.net/howtowritearule.html
Acho que dá para criar uma regra do tipo "Para uma classe no pacote br.corporacao.*.services.*, os métodos públicos devem ter o nome "gravar[A-Z][a-zA-Z0-9]*" ou "obter[A-Z][a-zA-Z0-9]*" .
Pegue seu desenvolvedor que acabou de ter aquela matéria de Construção de Compiladores e sabe tudo sobre parsing, e passe o abacaxi para ele.
|
|
|
 |
|
|