Creo que está llevando el principio de repetición del código demasiado lejos. Piense en el punto de evitar la repetición de código. El punto es reducir la cantidad de código que debe verificarse cuando hay un cambio en la lógica, y aumentar la comprensión al factorizar bloques obviamente de intención similar.
Las desventajas de la factorización para evitar la repetición son que si uno de los bloques compartidos tiene que cambiar, ahora necesita una herencia aún más compleja o un cambio entre la implementación estándar y la no estándar.
Por lo tanto, sopese cuidadosamente la posibilidad de que la lógica de incluso uno de estos bloques cambie sin los otros contra los beneficios de comprensión obtenidos al factorizar esta comunidad. Si una implementación puede separarse de las demás, es mejor que simplemente repita el código.
Mientras mantiene este código repetido, a medida que se vuelve más complejo y el dominio de su problema se vuelve más definido, puede encontrar más apropiado factorizar las secciones repetidas, ahora más complejas, pero también más definidas.
Por lo general, trato de mantener la uniformidad del editor de texto durante un tiempo hasta que puedo ver si vale la pena factorizar algo que parece ser repetitivo. Simplemente mantengo la repetición, pero mantengo mi ojo hacia el futuro de ese bloque al mantenerlo textualmente fácil de combinar más tarde.
Gran parte del tiempo, la igualdad y la posible factorización comienzan a disiparse, como reglas comerciales reales, caprichosas y una lógica altamente dependiente, a menudo arbitraria; como lidiar con las rarezas de varias implementaciones de bases de datos comunes (ANSI_NULLS o algo así viene a la mente) se agregan; obligando a lo que parecía una lógica pura a un desorden retorcido, tratando de proporcionar una lógica de decisión razonable y defendible cuando se enfrenta con el desorden del estado de la industria.
Me parece que si la gente tratara de descifrar lo que está tratando de factorizar, tendríamos una biblioteca completa de construcciones sin valor como Do1Then2If2False Do1IfTrueDo2.
Tiene que ser más complejo y más claro que el bloque no va a cambiar para justificar su factorización.
Es software . Puede regresar y editar un par de bloques que son iguales en este momento. Tomará 5 minutos. Y puede ahorrar horas de factorización desperdiciada, y luego horas más de herencia desperdiciada y desarrollo de conmutación, simplemente dejándolo y asegurándose de tener un buen teclado anti-RSI.