Convenções de Nomenclatura da Interface Java [closed]

Eu trabalho em um aplicativo da Web Java que usa o Spring para injeção de dependência e o JMock para debater essas dependências em nossos testes de unidade.

Atualmente, nossa equipe está em um ponto em que temos algumas opiniões diferentes em termos de como nomear certas interfaces que usamos. Não temos nenhum problema em nomear as interfaces em nosso domínio que possuem várias implementações, o que é simples. No entanto, quando se trata de interfaces para as quais só temos uma implementação e pretendemos ter apenas uma implementação no futuro, temos um problema.

A razão pela qual temos essas interfaces é puramente para zombaria, por exemplo, temos serviços e repositórios que ridicularizamos em nossos testes unitários e que esses serviços serão denominados "DocumentMappingService" ou para repositórios "EmployeeRepository". No momento, alguns dos caras apenas prefixam o nome da interface associada com um "I", ou seja, "IDocumentMappingService" e "IEmployeeRepository". Outros nomeiam a interface como eu fiz acima e depois adicionam um "Impl" após o nome da interface para a classe de implementação.

A terceira "facção" considera que ambas as opções são ruins. Olhando para a literatura, como o conhecido "software orientado a objetos de crescimento, guiado por testes" levaria a acreditar que ambas as opções mencionadas anteriormente são pobres e que o nome da interface deve definir claramente o contrato e o nome das classes de implementação deve especificar claramente como esse contrato foi implementado. Achamos isso bastante difícil de fazer no caso que mencionei acima.

Eu estava esperando que alguém lá fora tenha tido um problema semelhante antes e tenha algumas sugestões de qual opção é a melhor e por quê. Além disso, se você acha que as opções "I" e "Impl" são ruins, sugira uma convenção alternativa específica.

questionAnswers(2)

yourAnswerToTheQuestion