Patrones de diseño: ¿buenos o malos?

Hace un tiempo he leído variado artículo y discutido con varias personas sobre este tema, uno de los cuales me apasiona bastante recientemente.

Resumiendo los puntos de vista a favor, se puede destacar lo siguiente:

  • Los patrones de diseño son una recopilación de buenas prácticas para resolver problemas de diseño comunes o recurrentes.
  • Hasta el programador más novato hace uso implícito de patrones, como mínimo usando las implementaciones que pueden ofrecer los frameworks para diferentes funcionalidades. Por ejemplo, el patrón Iterator para recorrer una colección.
  • Los patrones de dseño se han vuelto un pilar del desarrollo de software. La mejor muestra de ello es el catálogo de Gang of Four, el cual después de muchos años aún es vigente y la mayoría de sus patrones siguen siendo modelo a seguir (ojo, no todos!).

Por el contrario, desde otro punto de vista se puede decir lo siguiente:

  • En ocasiones los patrones de diseño introducen complejidad innecesaria en un sistema, al tratar de especular sobre flexibilidad a futuro que puede que nunca se vaya a necesitar, haciendo mas complicada asi la labor de mantenimiento de un  sistema.
  • Un patrón de diseño usado por personas poco experimentadas puede traducirse en un desastre de software.
  • Hay patrones de diseño que introducen más problemas de los que resuelven, un ejemplo de ellos es el Singleton

En terminos generales, la conclusión es que a la hora de diseñar una solución se debe pensar primero, analizar la problemática, evaluar las alternativas de solución posibles, y mantener siempre presentes los principios de un buen diseño: simplicidad, alta cohesión, bajo acoplamiento, y tomar decisiones basados en experiencias.

¿Usted qué opina?