En un lenguaje OO (p. Ej., Pero no limitado a Java), ¿cómo arregla el código duplicado dependiendo del alcance de su ocurrencia? Yo comenzaría con (por ejemplo)
- en la misma clase (alcance) realice la refactorización del método de extracción (arreglo)
- en clases de la misma jerarquía (alcance), realice el método de extracción y el pull up (arreglo)
- ...
object-oriented
dry
Peter Kofler
fuente
fuente
Respuestas:
Recientemente encontré una buena respuesta a mi pregunta en el "Código limpio" del tío Bob, que quiero compartir. Él diferencia tres tipos de duplicación
Las piezas de código idéntico deben reemplazarse con un único método. Entonces, la solución sería extraer el método y delegar al comportamiento común.
SthUtil
oSthLib
).casos de
switch/case
yif/else
que siempre prueban el mismo conjunto de condiciones .Módulos que implementan algoritmos similares . Estos son los más difíciles de encontrar, ya que ningún detector de clones puede encontrarlos.
También un punto válido mencionado por Oded, cuando se trata de diferentes versiones de bibliotecas
Al final, la mejor frase para responder a mi pregunta es por estímulos:
fuente
En general, consolide el código duplicado en un solo lugar y asegúrese de que el sitio de duplicación original llame al lugar consolidado.
En sus ejemplos, dentro de una clase, este sería el método extraído y dentro de un conjunto de clases, el método desplegado dentro de la clase base.
En el código de copiar y pegar, esto sería eliminar los duplicados y garantizar que los usuarios ahora usen la copia única (en cualquier nivel que sea).
Cuando trabaje con diferentes versiones de bibliotecas, consolide en una única versión (si es posible).
fuente
Supongo que esta es una pregunta abierta pero también depende del estado del código. Quiero decir que puedes tolerar un poco el código duplicado dependiendo del contexto. La regla de tres es buena para este asunto.
Regla de tres La primera vez que haces algo, simplemente lo haces. La segunda vez que haces algo similar, haces una mueca por la duplicación, pero haces lo duplicado de todos modos. La tercera vez que haces algo similar, refactorizas.
Aunque esto es bastante discutible, esta publicación también considera casos en los que tolerarías código duplicado.
fuente