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, y en este articulo vamos te contamos la importancia de los mismos.
Hace unos días atrás en una entrevista me consultaron sobre mi conocimiento en patrones de diseño, si los usaba y cuales usaba, con una información un poco escasa acerca del tema decidí escribir este artículo.
La importancia de aprender patrones de diseño en desarrollo backend
Cuando empezamos a desarrollar software, es común que cada quien utilice su propia lógica, conocimientos y experiencia para crear código. Y esto muchas veces resulta en desarrollos complejos que sólo su creador entiende. Pero, ¿es posible desarrollar un módulo que otro programador pueda aprovechar entender y mejorar? La respuesta está en los patrones de diseño. Estos básicamente son modelos muestra que sirven como guía para que los programadores trabajen sobre ellos.
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?
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.
Tipos de patrones de diseño
Los patrones de diseño se clasifican en tres tipos diferentes dependiendo del tipo de problema que resuelven. Estos pueden ser creacionales, estructurales y de comportamiento.
Creacionales: Su objetivo es resolver los problemas de creación de instancia. Por ejemplo:
- Singleton (Instancia única): Nos garantiza la existencia de una única instancia para una clase.
- Prototype (prototipo): Clona las instancias ya existentes.
Estructurales: Su nombre es muy descriptivo, se ocupa de resolver problemas sobre la estructura de las clases. Por ejemplo:
- Bridge (Puente) Separa la abstracción de la implementación.
- Decorator (Decorador) Agrega funcionalidades a una clase de forma dinámica.
- Facade (Fachada) Nos provee una interfaz unificada y simple para acceder a un sistema más complejo.
De comportamiento: Nos ayuda a resolver problemas relacionados con el comportamiento de la aplicación. Ofrece soluciones respecto a la interacción y responsabilidad entre objetos y clases. Por ejemplo:
- Observer (Observador) La definición que provee Wikipedia es bastante entendible y real, dice “Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambie de estado se notifique y actualicen automáticamente todos los objetos que dependen de él.”
¿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, pero sin embargo los patrones de diseño muchas veces podrías usarlos sin que tú mismo estés consciente de ello, ya que es un paso casi natural cuando vienes desarrollando mucho tiempo.
Pero ahora turno para ti, cuéntanos ¿conoces algunos patrones de diseño? Si es así, ¿Cuáles son los que más utilizas?