A la hora de diseñar un sistema es importante tener presente una serie de principios de diseño fundamentales que nos ayudarán a crear una arquitectura, que minimicen los costes de mantenimiento y maximicen la usabilidad / la extensibilidad / solución de todos los tipos de requerimientos de la aplicación.
Principios clave reconocidos por la industria del software:
- Principios “SOLID”:
- Principio de única responsabilidad (Single Responsability Principle). Una clase debe tener una única responsabilidad o funcionalidad.
- Principio abierto cerrado (Open Close Principle). Las clases deben ser extensibles sin requerir modificación en la implementación interna de sus métodos.
- Principio de Sustitución de Liskov (Liskov Substitution principie). Los subtipos o clases hijas deben ser sustituibles por sus propios tipos base relacionados (clases base). Generando una extensibilidad en los componentes del sistema por cada funcionalidad específica.
- Principio de Segregación de Interfaces (Interface Segregation Principle). Muchas interfaces muy especializadas son preferibles a una interfaz general en la que se agrupen todas las interfaces. Interfaces específicas al consumidor.
- Principio de Inversión de Dependencias (Dependency Inversion Principle). Las dependencias directas entre clases deben ser reemplazadas por abstracciones (interfaces, herencia) para permitir diseños top-down sin requerir primero el diseño de los niveles inferiores. Las abstracciones no deben depender de los detalles, los detalles deben depender de las abstracciones.
- Alta cohesión (High Cohesion): El diseño de componentes debe ser altamente cohesivo: No sobrecargar los componentes añadiendo funcionalidad mezclada o no relacionada. Relacionado con el principio Single Responsability Priniciple.
- Bajo acoplamiento (Low Coupling): Bajo acoplamiento. Minimizar las relaciones e interconexiones entre componentes minimizando la dependencia entre ellos.
- Separación/abstracción de conceptos/lógicas/funcionalidades de la aplicación (Separation of Concerns): Minimizar puntos de conexión entre conceptos para conseguir una alta cohesión y un bajo acoplamiento.
- Principio DRY – DIE (Don’t Repeat Yourself – Duplication Is Evil): Evitar la duplicidad mediante la reutilización. Se debe especificar/implementar la funcionalidad en un único sitio en el sistema (componente, módulo o clase). Una misma funcionalidad no debe estar implementada en otros componentes.
- Principio YAGNI (You Ain´t Gonna Need It): Diseñar solamente lo que es necesario para cubrir los requisitos actuales, no realizando sobre-ingenierías innecesarias.
- Principio KISS (Keep It Simple and Stupid): La sencillez debe ser un objetivo clave en el diseño y la complejidad innecesaria debe ser evitada.





Comentarios recientes