martes, 17 de junio de 2014

¿Qué hay de los patrones de diseño?

En muchas ocasiones hemos escuchado hablar acerca de los famosos patrones de diseño, escuchamos que nos facilitan la vida al desarrollar o al plantear una arquitectura de software. Escuchamos que son soluciones probadas y certificadas a problemas comunes y conocidos en el desarrollo de software, y la verdad aunque escuchamos mucho acerca de ellos y los utilizamos a diario (Aunque a veces no nos demos cuenta) en ocasiones pasamos por alto la importancia que tienen. En mi opinión los patrones de diseño hacen parte de las buenas prácticas que garantizan resolver un problema de una manera óptima y además de eso de una manera que ya se sabe que funciona correctamente. Ahora no quiere decir que en todos los casos de nuestros proyectos apliquen todos los patrones de diseño, o que siempre un patrón de diseño será infalible en todos los casos, pues no, recordemos que en el desarrollo de software no existen balas de plata como dicen por ahí, y que no todo recurso es efectivo para atacar o resolver todos los problemas, es allí donde es importante tener conocimiento de gran parte de los recursos con los que contamos, en este caso los patrones de diseño, para echar mano de alguno en específico en un problema determinado.

Adicional cabe destacar que como en todo, no hay que abusar de ellos, pues es bueno analizar si en un determinado caso agregamos solo complejidad innecesaria a nuestras implementaciones, dando lugar a anti patrones con los cuales lo único que lograremos es tener un gran y complejo proyecto el cual se dificulte de comprender y mantener por otros desarrolladores, que en una etapa de mantenimiento que suele ser la más costosa del ciclo de desarrollo, no queremos.

Ahora después de esta introducción tan personal, entremos un poco en materia y veamos algunos aspectos básicos e importantes de los patrones de diseño:

"Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.

Un patrón de diseño resulta ser una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reutilizable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias."


Esta, la definición de Wikipedia y el link por si quieren profundizar un poco más en el tema. Y como vemos la importancia de que un patrón compruebe que efectivamente soluciona un problema y que es reusable para múltiples escenarios que se puedan parecer. Como es el caso del patrón Iterador por ejemplo, cuyo propósito es permitir acceder secuencialmente a un grupo de objetos de una colección, y que es un patrón que usamos a diario en nuestras labores, y como mencioné anteriormente muchas veces no nos percatamos de ello, y sin contar un sin fin de patrones que son utilizados por los FrameWorks que usamos y que nos facilitan la vida.

Para terminar con este breve artículo sobre patrones de diseño, vamos a ver algunos de los patrones de diseño más conocidos y por ende más usados, y cómo estos se clasifican dependiendo de su propósito:

Patrones Creacionales:
  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype
  • Singleton
Patrones estructurales:

  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Proxy

Patrones de comportamiento:
  • Chain of Responsibility
  • Command
  • Iterator
  • Observer
  • Strategy
Bueno amigos eso es todo de esta introducción y opinión personal sobre los patrones de diseño, espero sea de utilidad y de interés para ustedes, en próximos artículos iniciaremos una serie de post sobre este tema, en los cuales hablaremos acerca de algunos patrones (Propósitos, ventajas, desventajas, escenarios de aplicabilidad, etc) y veremos cómo implementarlos a través del lenguaje C#.

Saludos, y buena suerte!

No hay comentarios:

Publicar un comentario