Si eres programador seguro que has oído hablar de los patrones de diseño. Es posible incluso, que ya los estés utilizando en tus aplicaciones.
Los patrones de diseño son una herramienta muy útil. Cualquier programador debería conocer, por lo menos, los patrones más utilizados. Y es que tenerlos en nuestra caja de herramientas nos puede ahorrar muchos dolores de cabeza.
Aunque en este artículo no vamos a hablar de patrones concretos, hay que tener en cuenta que estamos haciendo referencia a patrones aplicados a la programación orientada a objetos.
¿Qué son los patrones de diseño?
Los patrones de diseño son soluciones para problemas típicos y recurrentes que nos podemos encontrar a la hora de desarrollar una aplicación.
Aunque nuestra aplicación sea única, tendrá partes comunes con otras aplicaciones: acceso a datos, creación de objetos, operaciones entre sistemas etc. En lugar de reinventar la rueda, podemos solucionar problemas utilizando algún patrón, ya que son soluciones probadas y documentadas por multitud de programadores.
¿Por qué usar patrones de diseño?
Como ya vimos en el artículo sobre principios de diseño, si queremos desarrollar aplicaciones robustas y fáciles de mantener, debemos cumplir ciertas "reglas". Lo pongo entre comillas porque aunque estas reglas de diseño son recomendables (muy recomendables), no son obligatorias. Siempre podemos decidir no aplicarlas. Aunque si no lo hacemos, hay que ser conscientes de la razón de no aplicarlas y de sus consecuencias.
Los patrones de diseño nos ayudan a cumplir muchos de estos principios o reglas de diseño. Programación SOLID, control de cohesión y acoplamiento o reutilización de código son algunos de los beneficios que podemos conseguir al utilizar patrones.
¿Cuántos patrones de diseño existen? ¿Tengo qué conocerlos todos?
Patrones de diseño hay muchos. Muchísimos. Y siguen apareciendo patrones nuevos cada poco tiempo. El desarrollo de aplicaciones es una disciplina en constante cambio. Por tanto los problemas a los que nos enfrentamos los desarrolladores también cambian. Así que las herramientas utilizadas, también se van actualizando y mejorando.
Es imposible conocer todos los patrones de diseño. Lo más útil es tener un catalogo de patrones que podamos consultar. A la hora de desarrollar una aplicación, podremos consultar nuestro catálogo buscando patrones que nos ayuden a solucionar problemas de diseño concretos.
Algunos ejemplos de catálogos podemos encontrarlos en OODesign, en la Wikipedia, o el ya famoso libro Design Patterns: Elements of Reusable Object-Oriented Software, cuyos autores son conocidos como La banda de los cuatro.
¿Qué tipos de patrones existen?
Existen diversas maneras de agrupar los patrones de diseño. Quizá la más extendida es agruparlos según su propósito. En este caso tendríamos las siguientes categorías:
- Patrones creacionales: utilizados para instanciar objetos, y así separar la implementación del cliente de la de los objetos que se utilizan. Con ellos intentamos separar la lógica de creación de objetos y encapsularla.
- Patrones de comportamiento: se utilizan a la hora de definir como las clases y objetos interaccionan entre ellos.
- Patrones estructurales: utilizados para crear clases u objetos que incluidos dentro de estructuras más complejas.
¿Puedo desarrollar nuevos patrones?
Como ya he dicho antes, cada poco tiempo aparecen nuevos patrones o revisiones de los ya existentes. Es algo lógico si tenemos en cuenta que nuestra forma de programar está evolucionando continuamente. Nuevos frameworks, nuevas plataformas, nuevos tipos de acceso a datos etc.
Por tanto, es factible que cualquiera pueda "descubrir" un nuevo patrón. Lógicamente el supuesto patrón deberá ser puesto a prueba por la comunidad de desarrolladores. Para ello deberá demostrar que es nuevo, que es correcto y que es útil para solucionar problemas comunes de desarrollo. Un patrón no será tal si solo sirve para solucionar un problema específico de nuestra aplicación.
Conclusiones
La conclusión es sencilla, si no usas patrones, deberías hacerlo. Los patrones ayudan a estandarizar el código, haciendo que el diseño sea más comprensible para otros programadores. Son muy buenas herramientas, y como programadores, siempre deberíamos usar las mejores herramientas a nuestro alcance.
Eso sí, siempre con cabeza y sentido común. De nada vale aplicar patrones sin una buena razón.
Y tú ¿utilizas patrones? ¿Cuáles son los que más utilizas?
Imagen | darkday.