🤔 La lógica puede estar en los datos
Normalmente los requisitos funcionales son complejos y volátiles. Este tandem genera mucho ruido en el código. Manipulaciones constantes de secciones complejas son fuente de dolor de cabeza.
Hemos dedicado un tema a las estructuras repetitivas y condicionales y hemos visto cómo reducir la complejidad o al menos clarificar la intención de la lógica.
En estas regiones de código es dónde más claramente se expresa la lógica del negocio que estamos modelando y debemos prestarles especial atención. Pero mucho mejor sería no tener que hacerlo.
🔨 Usa estructuras de datos que eviten el uso de estructuras condicionales
Si la lógica cambia y no queremos cambiar el código; tenemos un problema. La solución pasa por reducir el uso de las estructuras condicionales sustituyéndolas por estructuras de datos.
3️⃣ La regla de 3
Este tipo de actuación en el código es exigente en términos de destreza técnica y dominio del negocio. Pero eso no debe echarte atrás. Simplemente quiere decir que empieces poco a poco y que lo apliques como un refactor cuando lo veas necesario.
Como regla para recordar, nos sugieren que optemos por la sustitución de estructuras lógicas en cuanto haya tres modificaciones de cualquier regla establecida. Es por eso que se recuerda como la regla de tres. Veamos un ejemplo.
1️⃣ No hay que anticipar nada cuando te expresan una primera regla. Por ejemplo "Mi empresa opera en España".
2️⃣ Puedes empezar sospechar ante un primer cambio "Vamos a abrir también en México con estas condiciones".
3️⃣ Pero ante el tercer caso... no dudes: aplícate y generaliza tu código. "En dos meses estaremos en Colombia"
El if
y sobre todo el switch
huelen mal 🤢
Como consecuencia de los cambios en las reglas de negocio tendrás que implantar o modificar muchas instrucciones con if else
o peor aún con switch case
. Cuanto menos toques el código mejor. Así que procura usar menos el if y el switch
- Reduce los
if
evitando 🚩 flags en las funciones, creando funciones distintas. - Sustituye un 🔱
switch
por un objeto, un array o un mapa y busca en él un valor o función. - Incluso valora cambiar un 🔱
switch
por un sistema de clases conherencia😱 usando la inversión de control 🙃.
Verás que poco a poco tu código será más genérico y admitirá más cambios funcionales sin necesidad de recompilar. Verás entonces que el mundo está llenos de estructuras de datos por todas partes.