Patrón de diseño es un enfoque para resolver un problema típico. Ya discutimos algunos de ellos, desde diferentes tipos de despacho hasta la Estrategia y la Fábrica. Hay muchos patrones, cada día se inventan nuevos y cada programador tiene sus propios patrones para sus tareas.
En general, los patrones no están relacionados con el concepto de POO, pero es en la POO donde se estructuran y describen. Por lo tanto, este tema es especialmente común en lenguajes con estructura de clases, como Java, C# o PHP. La mayoría de estos patrones se reducen a cómo aplicar correctamente el polimorfismo de subtipos en diferentes situaciones. Aquí hay solo algunos de los más conocidos que se basan en el polimorfismo:
- Adaptador
- Estrategia
- Fábrica abstracta
- Puente
- Composición
- Decorador
- Mediador
- Cadena de responsabilidad
- Observador
- Estado
- Método de plantilla
- Visitante
Algunos de ellos están relacionados con la abstracción y tienen un estado interno, otros son simplemente funciones empaquetadas en clases solo por el polimorfismo (pero podrían haber sido implementadas como funciones normales que se despachan de diferentes maneras).
En el mundo de la POO, el libro "Design Patterns: Elements of Reusable Object-Oriented Software" se considera la principal fuente de patrones. Realmente describe muchos enfoques útiles, pero ten cuidado. Ten en cuenta lo siguiente:
- Los ejemplos en el libro están en C++ y tienen una implementación más compleja de lo necesario en lenguajes dinámicos.
- Muchos patrones surgen debido a las limitaciones de un lenguaje específico, como el patrón Comando. En JavaScript, es una forma natural de escribir código y no se necesitan clases para eso.
- No todos los patrones descritos en este libro son tan importantes para los desarrolladores web. La probabilidad de que alguna vez tengas que lidiar con una fábrica abstracta es extremadamente baja.
- Hay muchos más patrones que los mencionados en este libro. Los patrones no son una doctrina: todo fluye, todo evoluciona.
Polimorfismo en patrones o el patrón de creación de patrones
La mayoría de los patrones relacionados con el polimorfismo se construyen según el mismo principio. Conociendo esto, podrás tomar decisiones correctas por ti mismo, incluso sin conocer el patrón para una situación dada. La idea clave es que se toma el conjunto completo de comportamientos posibles y se crea una clase propia para cada uno.
Por ejemplo, en la Estrategia, la cantidad de clases de estrategia coincide con la cantidad de formas diferentes de cálculo. Si hay cinco, tendrás que crear cinco clases. Al menos en lenguajes orientados a clases. En lenguajes que prefieren las funciones, se crearán cinco funciones diferentes y seguirá siendo una Estrategia.
Antipatrones
Si hay patrones, entonces también existen antipatrones, que son errores típicos que cometen los programadores. Muchos de ellos tienen nombres bastante específicos y a menudo humorísticos, como "Objeto todopoderoso". Lo más sorprendente es que los enfoques que antes se consideraban patrones a veces se convierten en antipatrones. El ejemplo más notable es el patrón Singleton, que es un objeto que solo puede existir en una instancia. Como la vida ha demostrado, esto es casi siempre malo. Además, el código con singletons es extremadamente difícil de probar.
Aprendiendo patrones
Muchos principiantes se preocupan por aprender patrones de diseño. ¿Es necesario? ¿Cuántos hay que aprender? ¿Qué libros usar?
Intentemos aclararlo. En la práctica, todos hablan de patrones, pero pocos los leen, entienden y aplican bien. Esto se debe a varias razones. Primero, es difícil entender un patrón sin enfrentar un problema real que resuelve. Segundo, comprender los patrones está relacionado con conceptos clave que vemos a lo largo de la profesión: nombrar correctamente, gestionar el estado, efectos secundarios, abstracciones, extensibilidad y polimorfismo de subtipos. Sin entender estos conceptos, usar patrones puede ser inútil. De hecho, los patrones tienen un impacto menor en el código comparado con estos conceptos.
Es crucial entender que los patrones son una consecuencia, no una causa. Evita pensar "aquí hay un patrón, ¿cómo lo aplico?". Primero entiende la situación, luego surge el patrón adecuado. Es normal que en los primeros años de desarrollo, y a veces más, se resuelvan problemas como se pueda. Aprendemos a través de errores y decisiones incorrectas, y no hay que temerlos.
Materiales adicionales
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.