Los principios SOLID son una lista de principios para construir software siguiendo buenas practicas, presentados por Robert C. Martin en su documento Principio de diseño y Patrones de diseño.
Las siglas representan lo siguiente:
- S: Responsabilidad única.
- O: abierto/cerrado.
- L: Sustitución de Liskov.
- I: Segregación de la interfaz.
- D: Inversión de dependencias.
Una clase solo debe tener una y solo una razón para cambiar.
De un software complejo cada clase solo debería ser responsable de una tarea, en consecuencia al cambiar una funcionalidad solo debería tocar una clase.
Ventaja:
- Alta cohesión y bajo acoplamiento.
Acoplamiento: Grado de interdependencia entre módulos de software.
Cohesión: Grado en que los elementos de un modulo permanecen juntos.
Ventajas:
- Mayor mantenibilidad.
- Mayor reutilización.
- Menor riesgo de cambio.
Las entidades de software (clases, módulos, funciones) deberían ser abiertas para la extensión pero cerradas a la modificación.
Entonces “Abierta a la extensión pero cerrado a la modificación”, en otras palabras significa añadir nueva funcionalidad sin cambiar el código existente.
Usa clases abstractas e interfaces.
Ventaja:
- Gestionamos nuevas extensiones(funcionalidades) de una manera mas robusta.
Cualquier clase que sea hija de una clase padre, debería poder usarse en lugar de su padre sin ningún comportamiento inesperado.
Cuando extendemos una clase no alteramos el comportamiento del padre.
Usa herencia.
Ventaja:
- Jerarquía de clases estables.
Ninguna clase debe implementar métodos que no utilice.
Muchas interfaces especificas de cliente son mucho mejor que una interface de propósito general.
Resuelve el anti-patrón “fat interface”.
Ventaja:
- Sistemas desacoplados.
- Código sencillo de refactorizar.
- Las clases de alto nivel no deben depender de las clases de bajo nivel.
- Las abstracciones no deben depender de los detalles. Los detalles deben depender de las abstracciones.
El núcleo no depende de los detalles de implementación. En otras palabras que no dependa de que Base de Datos elegimos o si los datos vienen de manera local, web services o diferentes Frameworks.
Puedes usar inyección de dependencias para resolver este problema.
Ventaja:
- Mayor testeabilidad.
- Mayor mantenibilidad.
- Menor acoplamiento fuerte.
Es el proceso mediante el cual construimos dependencias (objetos, entidades, instancias) fuera del objeto dependiente y se lo proveemos cuando lo necesite.
Ventajas:
- Mayor legibilidad.
- Mayor expansibilidad.
- Mayor mantenibilidad.
- Mayor testeabilidad.
El código de ejemplo se basa en el lenguaje kotlin, utilice el framework IntelliJ IDEA.
- Código - Responsabilidad única
- Código - Principio Abierto/Cerrado
- Código - Principio de Sustitución de Liskov
- Código - Principio de Segregación de Interfaz
- Código - Principio de Inversión de Dependencias
Si te sirvió puedes darme manito arriba en mi blog.