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.
- en el mismo método, realice la Extracción de la variable local y reutilícela.
- en la misma clase, realice la refactorización del método de extracción.
- en clases de la misma jerarquía, método de extracción y extracción. Se podría crear una jerarquía para encontrar un lugar para los métodos.
- en clases de jerarquías separadas use la delegación a nuevos objetos.
- Si los métodos no necesitan ningún estado de cierre, entonces se podría aplicar el patrón "lib" (que es un contenedor para métodos estáticos, generalmente llamados
SthUtil
o SthLib
).
casos de switch/case
y if/else
que siempre prueban el mismo conjunto de condiciones .
- Estos deben ser reemplazados con polimorfismo.
Módulos que implementan algoritmos similares . Estos son los más difíciles de encontrar, ya que ningún detector de clones puede encontrarlos.
- Como el alcance es mayor, se utilizan patrones de diseño. El patrón de diseño del Método de plantilla puede aplicarse para algoritmos dentro de una jerarquía de clases.
- El patrón de diseño de la estrategia puede aplicarse a cualquier algoritmo que se use en diferentes lugares.
También un punto válido mencionado por Oded, cuando se trata de diferentes versiones de bibliotecas
- consolidar en una sola versión. El patrón de diseño de fachadas podría ayudar aquí.
Al final, la mejor frase para responder a mi pregunta es por estímulos:
El método de reutilización de código utilizado en los lenguajes OO es objetos.