¿Razonar para esperar hasta la tercera vez en la Regla de Tres?

16

Acabo de encontrar el artículo " Regla de tres " en wikipedia

La regla de tres es una regla general de refactorización de código para decidir cuándo una pieza de código replicada debe ser reemplazada por un nuevo procedimiento. Establece que el código se puede copiar una vez, pero que cuando se usa el mismo código tres veces, se debe extraer en un nuevo procedimiento. La regla fue introducida por Martin Fowler en Refactoring y atribuida a Don Roberts.

Sé que esto es solo una regla general, pero ¿por qué se recomienda refactorizar solo después de la segunda duplicación? ¿Hay alguna desventaja en la refactorización cuando escribimos la primera duplicación?

Louis Rhys
fuente
2
Ver dos es un número imposible y la regla de cero-uno-infinito para otro conjunto de perspectivas.
AakashM
Cuando se habla de desarrollo de software, el Wiki original suele ser una fuente mucho mejor que Wikipedia. Después de todo, Ward Cunningham inventó el Wiki como un medio para hablar sobre el desarrollo de software. Ver C2.Com/cgi/wiki?RuleOfThree
Jörg W Mittag
2
Si hay 2 escenarios para la reutilización, puede ramificar la lógica fácilmente (si, de lo contrario). Una vez que llega a tres caminos posibles, se vuelve más fácil re-factorizar que replicar y mantener.
Andrew Lewis
Creo que es una excusa conveniente para copiar y pegar, cuando uno puede refactorizar y generalizar. Cuando obtenga el tercer caso, puede generalizar más.
Alexey

Respuestas:

17

Creo que esta regla general existe porque es fácil quedar atrapado en jugar "Qué pasaría si ..." cuando se diseña el código por primera vez o después de la primera duplicación. Me he encontrado con una parálisis de análisis severa en algunos casos porque la gente comenzó a diseñar funcionalidades que podrían ser necesarias más adelante. Pero no es necesario para el problema inmediato en cuestión.

Existe un arte para diseñar / escribir solo lo que necesita, mientras se mantiene el código apto para la refactorización futura.

EdH
fuente
8
Ese es un buen punto. En mi experiencia, tener una tercera copia también hace que los puntos en común y las diferencias entre ellos sean un poco más nítidos que con solo dos.
Daniel B