Dada su pregunta, asumo que las razones de este tipo de diseño no están documentadas.
El uso no justificado de una interfaz con una implementación única es totalmente incorrecto, ya que esto infringe YAGNI . En mi experiencia, esto también ha sido bastante perjudicial en cuanto a mantenimiento, principalmente porque los métodos que implementan la interfaz se ven forzados a ser innecesariamente públicos. Después de reunir más experiencia de refactorización , probablemente aprenderás a apreciar el encanto modesto de private y package private modificadores de acceso que le permiten a uno centrar la atención en una sola clase / paquete.
En cuanto al uso justificado por indocumentado de este lenguaje, a mi modo de ver es tan malo, en primer lugar porque no permite a un mantenedor "decir lo bueno de lo malo". Como resultado, esto deja a uno entre opciones no bastante atractivas. Las opciones son, ya sea que mantengas el material público cuestionable tal como está, por lo tanto, repetidamente disminuyendo la productividad cada vez que necesites cambiar el código, o realizas cambios riesgosos al "ceder" la implementación única de forma ciega. mantener POJO - exponiéndonos al riesgo de descubrir dolorosamente que esta es una manera incorrecta, eso algún otro (módulo de remoto ) fuera de su vista espera la interfaz.
He pasado por "revelaciones" causadas por el colapso erróneo de la interfaz de implementación única varias veces. Cada vez ha sido una experiencia bastante educativa, pero realmente no me gustaría volver allí. Lo que sucede es que esto sucede en las últimas pruebas, en la integración o incluso en la aceptación por parte del usuario y revertir / corregir el error cometido hace mucho tiempo en esta etapa es bastante engorroso.
- Una opción que no debe dejarse sin mencionar es investigar si el uso no documentado está justificado (y, después de eso, colapsar o documentar respectivamente) justo en el momento en que lo encuentre.
Para mí, este ha sido bastante contraproducente. Este enfoque esencialmente lo obliga a realizar pruebas de integración completas, que probablemente sea una de las formas más eficientes de interrumpir un flujo en medio de algunas correcciones / refactorizaciones complicadas.
Simplemente no pude ver la practicidad ... las interfaces se usan una a una como com.company.service.foo
y com.company.service.foo.impl
A continuación se trata de cómo normalmente manejo casos como ese.
- Cree un ticket en el seguimiento de problemas , como "
PRJ-123
Undocumented uso cuestionable de la interfaz con implementación única en Foo / FooImpl ".
Agregue a la descripción del ticket o comente una explicación de que esto daña la capacidad de mantenimiento y señale que sin la documentación, esto se parece a overengineering . Agregue un comentario que sugiera solucionar el problema "colapsándolo" en un POJO, para facilitar el mantenimiento.
-
Espere un momento, por si acaso, si alguien viene a explicar las cosas. Esperaría una o dos semanas al menos
- Si alguien explica el propósito, a) ponga eso en el ticket, b) agregue a
Foo
javadocs algo como propósito de interfaz explicado en el ticket PRJ-123 , c) cierre el ticket, d) Salta los siguientes tres pasos.
- De lo contrario, ...
- Acérquese al jefe del equipo o al gerente para preguntar qué pensarían si yo arreglara el ticket según lo sugerido. .
- Colapsar a POJO según la solución sugerida, organizar revisión de código si es posible (en casos resbaladizos como ese, no te hará daño cubrir tu espalda).
- Espere hasta que el cambio pase la prueba completa y actualice el ticket dependiendo de su resultado: agregue la información sobre si el cambio pasó la prueba o no.
- Cree y administre un nuevo ticket de seguimiento de problemas para tratar los casos similares restantes según el resultado de su ticket piloto (
PRJ-123
): documente el propósito o colapse a POJO.