¿Dónde puedo aprender patrones de diseño para la programación? ¿Son específicos del idioma?

Hay algunas direcciones en las que se podría tomar esta pregunta. Permítanme comenzar diciendo que Joseph Hopper tiene una respuesta bastante buena. Con suerte, puedo agregarle algo a usted.

Se considera que el libro Gang of Four proporciona la definición de un patrón. Durante los 20 años transcurridos desde ese libro, la definición se ha expandido y contraído varias veces. Para la mayoría de la gente en estos días podemos simplificar la definición a esto:

Un patrón es una solución con nombre que se ha demostrado repetidamente que ayuda a resolver un tipo particular de problema.

Para mí, lo que los hace valiosos es realmente el nombre. Si estoy hablando con otro desarrollador y le digo: “Estoy usando un Memento aquí”, ese es un atajo que significa (siempre y cuando el otro desarrollador conozca un poco sobre ese patrón) no tengo que pasar el tiempo describiendo La solución y las razones detrás de esto. Acelera la comunicación, lo que acelera la creación de software.

No debería sorprendernos que algunos tipos de problemas solo ocurran en ciertos idiomas o conjuntos de idiomas. Entonces, un patrón que se aplica a JavaScript, puede no aplicarse a Ruby. Sin embargo, esos dos idiomas tienen similitudes significativas, por lo que habrá muchos patrones que se aplicarán a ambos.

Una cosa que es interesante es que varios de los patrones originales de GoF no se aplican a menudo a Ruby (o JavaScript). Básicamente, esos problemas simplemente no surgen o no tienen soluciones proporcionadas por el idioma.

Para aprender patrones, tienes muchas opciones. Si aprendes mejor de los libros, entonces el libro de GoF podría ser para ti, al igual que Head First Patrones de diseño , Patrones de diseño explicados simplemente , Patrones de diseño en Ruby o cualquiera de otros (Amazon tiene una gran cantidad de reseñas para un gran número de libros de patrones). Si prefiere aprender de la web, a menudo me encuentro yendo a SourceMaking como referencia, pero sinceramente, una búsqueda rápida en la web mostrará un montón de opciones.

Finalmente, recomiendo solo mirar el código. Mucho código. Participe en algunos proyectos de código abierto. Cuanto más código vea, más comenzará a ver problemas similares que se resuelven de manera similar. Cuando lo hayas visto varias veces, comienza a buscar un nombre. Pregunta por ahí. Tal vez tiene un nombre, o tal vez es un patrón que nadie ha identificado. Si es así, encuentre un buen nombre, publíquelo y todos podremos hacer un poco más.

Un patrón de diseño es exactamente eso, un patrón. No es un conjunto exacto de código. Hay patrones de diseño que son más comunes en un idioma frente a otro, pero eso se debe a que un idioma en particular tiene un conjunto de características que se ocupan de esa condición en particular, lo que lo hace menos probable o no lo hace más probable.

Echemos un vistazo al patrón decorador. El patrón del decorador lee que no hay ningún código involucrado en absoluto. Describe un problema que suele encontrar y una solución general para ese problema. La implementación del mismo varía según los detalles del problema y el idioma que está utilizando.

Hay muchos recursos que describen varios patrones. The Gang of Four es un buen libro. Puedes simplemente buscar en Google un patrón de diseño y echar un vistazo a varias páginas. Estoy seguro de que si buscara patrones de diseño en Amazon, obtendría muchos libros.

Pero lo importante de ellos es que no hay magia para ellos. La esencia de los patrones de diseño es simplemente que tendemos a encontrar los mismos tipos de problemas todo el tiempo. Y es una buena idea tener una estrategia para enfrentar esos problemas. Y también que lo hagamos de manera abstracta para que no estemos atados a una implementación que funcione en algunas situaciones, pero no en otras, aunque sean fundamentalmente el mismo problema.

Los patrones de diseño no son explícitamente específicos del idioma. Se aplican a cualquier lenguaje (orientado a objetos) por definición.

El famoso libro, el que lo comenzó todo, se llama ” Patrones de diseño: elementos de software orientado a objetos reutilizables “. Pero ahora tiene más de 20 años, por lo que una fuente más actualizada sería mejor para usted.

Incluso en la era de Internet, recomendaría seguir un libro real con ejercicios, ya que aprenderá más haciéndolos que viendo videos de youtub. Mis libros de programación favoritos son la serie “Head First”, y tienen un libro llamado “Head First Design Patterns”. No lo he superado yo mismo, pero he disfrutado a otros en su serie.