Monday, November 30, 2020

Diferencia entre principios y patrones de diseño de software

Hace poco encontré un libro de diseño de software titulado Software Design Decoded – 66 Ways Experts Think, donde se exploran hábitos, prácticas y principios que los profesionales de software usan en su día a día, mezclando la tecnología y la imaginación. La cuestión es que esta lectura me despertó la curiosidad por buscar la diferencia y relación entre dos conceptos que se usan bastante en nuestra industria: Principio de diseño y Patrón de diseño.


En primer lugar, es importante aclarar que, independientemente del nivel donde se apliquen (a nivel de funciones y clases, a nivel de componentes o a nivel arquitectónico), tanto los principios como patrones de diseño tienen un fin en común: Construir software flexible, mantenible y reusable. Visto desde otro ángulo, evitar un mal diseño caracterizado por:

  • Rigidez: Es difícil de cambiar porque cada cambio afecta a demasiadas otras partes del sistema.
  • Fragilidad: Cuando se hace un cambio, partes inesperadas del sistema se rompen.
  • Inmovilidad: Es difícil reutilizarlo en otra aplicación porque no se puede desacoplar de la aplicación actual.
  • Viscosidad: Es difícil hacer lo correcto pero fácil hacer lo incorrecto.

En segundo lugar, estos conceptos diferencian por lo siguiente:

  • Principio de diseño: Conjunto de pautas que nos ayudan a evitar un mal diseño de software. Ejemplo: Open Close Principle.
  • Patrón de diseño: Solución general reutilizable para un problema que ocurre comúnmente dentro de un contexto dado en el diseño de software. Ejemplo: Singleton.
Es decir, los principios de diseño son los objetivos deseables que uno se propone alcanzar mientras que los patrones de diseño son los recursos que se pueden utilizar para alcanzar esos objetivos. En otras palabras, los patrones de diseño emplean principios de diseño.

Los patrones de diseño son muy populares, tienen catálogos completos y son muy fáciles de encontrar información sobre estos.


Por otro lado, los principios de diseño han sido dispersados y desorganizados, y se han vuelto confusos para muchos. Existen esfuerzos de compilación de estos principios.


Finalmente, si quieres diferenciar mejor estos conceptos metiendo las manos en la masa, es decir, escribiendo código, te recomiendo que revises el libro Beginning SOLID principles and Design Patterns for ASP.NET Developers que te enseña lo esencial para aplicar los principios y patrones de diseño en el contexto del diseño orientado a objetos, utilizando ASP.NET Core.

¡Gracias por llegar hasta aquí!

No comments:

Post a Comment

Cuando el código funciona, pero no tiene tests: ¿y ahora qué?

Seguramente te ha pasado alguna vez. Te dan acceso al repositorio de un nuevo proyecto. Lo abres con curiosidad, esperas encontrar una estru...