Ferramenta de validação de convenção de nomenclatura

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?

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/ ).

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…

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.

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…

:slight_smile:

[quote=legionarioba]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…

[/quote]

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.

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 …

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)

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.