Principios KISS, DRY, WET & YAGNI.
El software debe tener calidad externa e interna, en esta entrada hablaremos de los principios fundamentales que deben ser tenidos en cuenta para lograr altos niveles de calidad interna, que refiere al cumplimiento de ciertos atributos en nuestro código fuente, entre ellos la legibilidad, reusabilidad, sencillez, testeabilidad, baja o nula deuda tecnológica y capacidad para extenderlo fácilmente.
Principio KISS
KISS es un principio aplicado al desarrollo de software y a otros ámbitos. Significa «Keep It Simple, Stupid», en español “Mantenlo simple y estúpido”, y nos quiere decir que las cosas sencillas funcionan mejor, a nivel de código, que lo mantengamos simple.
El principio KISS aplicado al desarrollo de software en particular implica que nuestra solución tanto en diseño como en implementación debe ser sencilla, no excederse en sobre-diseño o sobre-arquitectura cuando no sea necesario. Evitar el nivel de complejidad de la solución cuando no sea estrictamente necesario.
Ventajas:
- Mejora la legibilidad y comprensión del sistema.
- Facilita el mantenimiento y probablemente disminuya la deuda técnica.
- Podrás centrarte en resolver otros problemas.
- Produce código de mayor calidad.
¿Cómo aplicar KISS?
La clave para aplicar este principio, radica en la capacidad nuestra para poder descomponer un problema hasta sus elementos más indivisibles, y desde esa base poder aplicar esta práctica sin perder de vista claramente su objetivo como sistema.
Algunas sugerencias son:
- Divide el problema en muchos pequeños problemas. Cada problema debe poder resolverse en una o muy pocas clases.
- Mantener los métodos pequeños, donde cada método nunca debe tener más de 30-40 líneas. Cada método sólo debería resolver un pequeño problema, no muchos casos de uso.
- Si tiene muchas condiciones en su método, dividirlas en métodos más pequeños.
- Los dos puntos anteriores deben mantenerse tan simple como sea posible mientras codificas.
Ejemplo práctico
Veamos en un ejemplo la aplicación de este principio
public class KissSample { private static String []days = new String[] {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday", "Saturday"}; // Anti KISS sample, more complex, verbose sample public static String dayOfWeek1(int number) { switch (number) { case 1: return "Sunday"; case 2: return "Monday"; case 3: return "Tuesday"; case 4: return "Wednesday"; case 5: return "Thursday"; case 6: return "Friday"; case 7: return "Saturday"; default: throw new UnsupportedOperationException(); } } // Kiss Sample, simple, stupid public static String dayOfWeek2(int number) { if (number < 1 || number > 7) throw new UnsupportedOperationException(); return days[number-1]; } public static void main(String[] args) { System.out.println("1- Day 1 is " + dayOfWeek1(1)); System.out.println("2- Day 1 is " + dayOfWeek2(1)); } }
Principio DRY
Por sus siglas DRY significa Don’t Repeat Yourself, en español “No te repitas” llama a aplicar la práctica de no repetir el mismo código en el sistema. Básicamente una pieza de código en el sistema tiene que ser única, no ambigua, tener un objetivo único y no puede repetirse.
Ventajas
- Mejora la mantenibilidad: Esta es la principal ventaja de aplicar este principio, nos permitirá que cuando tengamos que realizar cambios en el código o refactorización, los ajustes los tengamos que realizar en un solo lugar. Adicionalmente corregir un bug será una tarea más sencilla ya que solo tendremos ese defecto solo en ese segmento de código y no duplicado en cada lugar donde se encuentra esa pieza de código.
- Permite crear un código más legible y fácil de entender para todo el equipo.
- Otra ventaja importante es la reusabilidad, esta es inherente a la aplicación de esta práctica, al fusionar varios bloques de código en una solo, con un objetivo definido, podremos reusarlo en el ámbito de la aplicación cada vez que lo necesitemos.
- Mejora el testeo del software (unitario, integración) al no tener duplicados.
- Mayor velocidad en el desarrollo como consecuencia de la reusabilidad.
Existe otro principio asociado con DRY pero con un significado completamente opuesto, es en sí lo contrario y debería evitarse, su nombre es WET, en inglés “We Edit Terrible / Tumultuously / Tempestuously / Tenaciously / Too much / Timidly / Tortuously”, en alguna bibliografía refiere a “We Enjoy Typing”, en referencia a que se disfruta escribir mucho o duplicar código, el significado que me parece más ajustado es “Write Everything Twice ”.
Ejemplo práctico
public class DrySample { public static final boolean logged = true; public static final String ROLE = "admin"; // DRY sample, just a method to check isAdmin public static boolean isAdmin() { return logged && ROLE.equals("admin") ; } // DRY sample, just a method run Report with args parameter number public static void runReport(int report) { if (isAdmin()) { System.out.println("Report " + report); } } // Anti DRY sample, another duplicated method to do the same that previous method public static void runReport2() { if (logged && ROLE.equals("admin")) { System.out.println("Report 2"); } } public static void main(String[] args) { runReport(10); runReport2(); } }
Principio YAGNI
Este principio, en inglés “You Aren’t Gonna Need It”, refiere a no codificar aquello que no vamos a necesitar, en español significa “No vas a necesitarlo”. Los programadores en ocasiones agregamos en las aplicaciones lógica “por si acaso”, pensando que en el futuro la vamos a necesitar, ignorando que estamos agregando complejidad adicional con algo que no aporta valor directo a la solución.
Desventajas de aplicar este principio
- Incremento del tiempo de desarrollo.
- Mayor complejidad para testear o alcanzar un mayor coverage en las pruebas.
- Dificulta la legibilidad.
- Puede incrementar los costes generales sin generar ningún beneficio a cambio.
Vídeo explicativo de los principios
En el siguiente vídeo puedes ver una explicación de estos principios
Espero te haya servido el artículo y el vídeo. Hasta la próxima entrada.
1 thought on “Principios KISS, DRY, WET & YAGNI.”
Comments are closed.