Dada a sua pergunta, presumo que as razões para esse tipo de design não estejam documentadas.
O uso injustificado de uma interface com implementação única é totalmente errado, pois isso viola YAGNI . Na minha experiência, isso também tem sido muito prejudicial à manutenção, principalmente porque os métodos que implementam a interface são forçados a ser desnecessariamente públicos. Depois de reunir mais experiência com a refatoração, provavelmente você aprenderá a apreciar o charme modesto de > private e pacotes private modificadores de acesso, permitindo focalizar a atenção em uma única classe / pacote.
Quanto ao uso justificado indocumentado deste idioma, é a meu ver tão ruim - em primeiro lugar, porque não permite que um mantenedor "conte o bem do mal". Como resultado, isso deixa entre opções não muito atraentes. As opções são: ou você mantém as coisas públicas questionáveis no estado em que se encontra, assim reduzindo a produtividade toda vez que precisar alterar o código ou fazendo alterações arriscadas ao "colapsar" cegamente a implementação única para facilitar para manter POJO - expor a si mesmo ao risco de descobrir dolorosamente que isso é errado, que algum outro (Deus me livre, remoto ) módulo fora de sua vista espera a interface.
Eu tenho passado por "revelações" causadas pelo colapso errado da interface de implementação única algumas vezes. Cada vez que tem sido uma experiência bastante educativa, mas eu realmente não quero chegar lá novamente. O fato é que isso acontece nos testes finais, na integração ou até mesmo na aceitação do usuário, e a reversão / correção do erro cometido há muito tempo neste estágio é bastante incômoda.
- Uma opção que não deve ser deixada sem mencionar é investigar se o uso indocumentado é justificado (e, depois disso, recolhido ou documentado, respectivamente) exatamente no momento em que você o encontra.
Para mim, este foi bastante contraproducente. Essa abordagem essencialmente força a pessoa a fazer o teste de integração de rodada completa, que é provavelmente uma das maneiras mais eficientes de quebrar um fluxo no meio de alguma correção / refatoração complicada.
I just couldn't see the practicality... the interfaces are used one-to-one like com.company.service.foo
and com.company.service.foo.impl
Bem abaixo é sobre como eu normalmente lide com casos como esse.
- Crie um tíquete no issue tracker , como "
PRJ-123
não documentado uso questionável de interface com implementação única em Foo / FooImpl ".
Adicionar a descrição do ticket ou comentar uma explicação de que isso prejudica a manutenção e ressaltar que sem documentação isso parece overengineering . Adicione um comentário sugerindo para corrigir o problema "colapsando" isso em um POJO, para facilitar a manutenção.
-
Espere por algum tempo para o caso de alguém explicar algo. eu esperaria uma ou duas semanas pelo menos
- Se alguém explicar o propósito, a) colocar isso no ticket, b) adicionar ao
Foo
javadocs algo como finalidade da interface explicada no ticket PRJ-123 , c) fechar o ticket, d) pule os próximos três passos.
- Caso contrário, ...
- Venha ao líder ou gerente da equipe para perguntar o que eles pensariam se eu consertar o tíquete como sugerido.
Escolha um conselheiro com autoridade suficiente para suportar o "teste de grito" no caso de correção sugerida ser errada .
- Recolha para POJO de acordo com a sugestão de correção, organize revisão de código se isso for possível (em casos escorregadios como esse não vai doer para cobrir as costas).
- Aguarde até que a alteração passe no teste completo e atualize o ticket, dependendo de seu resultado - adicione as informações sobre se a alteração passou no teste ou não.
- Crie e gerencie um novo ticket do rastreador de problemas para lidar com casos semelhantes restantes com base no resultado de seu ticket piloto (
PRJ-123
): documente a finalidade ou reduza para POJO.