¿Cómo estudiar patrones de diseño? [cerrado]

352

He leído alrededor de 4-5 libros sobre patrones de diseño, pero ¿todavía no siento que me he acercado al nivel intermedio en los patrones de diseño?

¿Cómo debo ir estudiando patrones de diseño?

¿Hay algún buen libro para patrones de diseño?

Sé que esto vendrá solo con experiencia, pero debe haber alguna forma de dominarlos.

anand
fuente
66
La mejor manera de aprender el patrón de diseño es haciendo un proyecto. Cuando vea patrones en el proyecto, sabrá cuándo usarlos aquí es un artículo que enseña el patrón de diseño paso a paso con un proyecto de código de
Shivprasad Koirala
1
Echa un vistazo a los Antipatterns también deviq.com/antipatterns
Desarrollador
Puedes aprenderlo desde aquí, play.google.com/store/apps/…
Keyur Thumar
Probablemente tarde pero todavía podría ayudar a alguien ... intente geeksforgeeks.org/software-design-patterns para comprender los conceptos básicos y los escenarios explicados donde se pueden usar. Me ayudó a entender el fundamento y el propósito de cada patrón
zeetit
Vea también, Pluralsight: pluralsight.com/courses/patterns-library
ssmith

Respuestas:

206

La mejor manera es comenzar a codificar con ellos. Los patrones de diseño son un gran concepto que es difícil de aplicar simplemente leyendo sobre ellos. Tome algunas implementaciones de muestra que encuentre en línea y desarrolle alrededor de ellas.

Un gran recurso es la página de Data & Object Factory . Repasan los patrones y le dan ejemplos conceptuales y del mundo real. Su material de referencia también es excelente.

Joseph Ferris
fuente
11
¡Exactamente! Siempre me ha divertido que el software se encuentre en "Informática". Puedo ver el argumento a favor del hardware, ¡pero el software es una ciencia muy inexacta!
Joseph Ferris el
Lamentablemente, este recurso ya no está disponible :(.
55
@NielsW Está arriba, tal vez solo fue una baja temporal.
uthomas
211

Leí tres libros y aún no entendía muy bien los patrones hasta que leí Head First Design Patterns de OReilly. Este libro me abrió los ojos y realmente me explicó bien.

texto alternativo

Darren C
fuente
14
Al principio es un poco extraño leer un libro "serio" que se parece a eso, pero a medida que seguía leyendo me di cuenta de que realmente estaba entendiendo los conceptos para variar. Definitivamente vale la pena leerlo.
Tim Whitcomb
18
Definitivamente creo que este es el mejor libro para aprender sobre patrones de diseño. El libro GoF debe usarse como referencia, después de que los comprenda mejor.
Bill the Lizard
mencionaste que leíste 3 libros ... ¿también leíste este? amazon.com/... si es así, ¿qué te pareció?
sivabudh el
11
Conocí a Erich Gamma (uno de los GoF) en una conferencia en Nantes, Francia en 2006 y dijo que este libro estaba vendiendo más que el libro GoF :)
Fuhrmanator
1
Después de leer este libro, OO tenía sentido. @SimpleFellow El libro de GoF es aburrido. Sin un conocimiento previo sobre los patrones de diseño, puede dormir de inmediato. Sin embargo, es un buen ( el ) libro de referencia y debe formar parte de cualquier biblioteca profesional junto con DDD y P de EAA.
mbx
93

Mis dos centavos por tal y vieja pregunta

Algunas personas ya mencionaron, practican y refactorizan. Creo que el orden correcto para aprender sobre patrones es este:

  1. Aprenda el desarrollo impulsado por pruebas (TDD)
  2. Aprender refactorización
  3. Aprender patrones

La mayoría de las personas ignora 1, muchos creen que pueden hacer 2, y casi todos van directamente por 3.

Para mí, la clave para mejorar mis habilidades de software fue aprender TDD. Puede ser mucho tiempo de codificación lenta y dolorosa, pero escribir sus pruebas primero ciertamente lo hace pensar mucho sobre su código. Si una clase necesita demasiado repetitivo o se rompe fácilmente, comienzas a notar malos olores bastante rápido

El principal beneficio de TDD es que pierde el miedo a refactorizar su código y lo obliga a escribir clases que son altamente independientes y coherentes. Sin un buen conjunto de pruebas, es demasiado doloroso tocar algo que no está roto. Con la red de seguridad, realmente se aventurará a realizar cambios drásticos en su código. Ese es el momento en que realmente puedes comenzar a aprender de la práctica.

Ahora llega el punto en el que debes leer libros sobre patrones y, en mi opinión, es una completa pérdida de tiempo esforzarse demasiado. Solo entendí muy bien los patrones después de notar que hice algo similar, o podría aplicarlo al código existente. Sin las pruebas de seguridad o los hábitos de refactorización, hubiera esperado hasta un nuevo proyecto. El problema de usar patrones en un proyecto nuevo es que no ves cómo impactan o cambian un código de trabajo. Solo entendí un patrón de software una vez que refactoricé mi código en uno de ellos, nunca cuando introduje uno nuevo en mi código.

Frank sistemático
fuente
u puede recomendar algunos libros para TDD y refactorización mayormente en C ++
Anand
2
Tendrá muchos problemas para encontrar contenido de calidad si se reduce a C ++. Además, C ++ no es el lenguaje en el que desea aprender las pruebas porque, técnicamente, carece de reflexión, eso solo hace que sea muy difícil construir buenas herramientas de prueba. Todavía es factible, pero las comunidades, foros, discusión y número de personas TDD son una minoría dentro de C ++ debido a eso. He trabajado mucho con él, pero a pesar de sus puntos fuertes, no es un lenguaje amigable para las pruebas.
SystematicFrank
35

Práctica práctica práctica.

Puedes leer sobre tocar el violonchelo durante años, y aún no ser capaz de poner un arco al instrumento y hacer algo que suene como música.

Los patrones de diseño se reconocen mejor como un problema de alto nivel; uno que solo sea relevante si tiene la experiencia necesaria para reconocerlos como útiles. Es bueno que reconozca que son útiles, pero a menos que haya visto situaciones en las que se aplicarían, o lo hubieran aplicado, es casi imposible comprender su verdadero valor.

Donde se vuelven útiles es cuando reconoce patrones de diseño en el código de otros, o reconoce un problema en la fase de diseño que encaja bien con un patrón; y luego examine el patrón formal, y examine el problema, y ​​determine cuál es el delta entre ellos, y qué dice eso tanto sobre el patrón como sobre el problema.

Es realmente lo mismo que la codificación; K&R puede ser la "biblia" para C, pero leerlo de principio a fin varias veces no ofrece una experiencia práctica; No hay reemplazo para la experiencia.

Paul Sonier
fuente
55
+1. Creo que muchos principiantes se lanzan demasiado rápido a patrones de diseño y comienzan a diseñar sistemas construidos alrededor de fábricas abstractas, singletons, observadores, visitantes, etc., directamente desde el libro. El resultado a menudo es duro, no hace el mejor uso del lenguaje, y ni siquiera está bien diseñado desde un punto de vista básico de acoplamiento / cohesión (este último sufre especialmente cuando los patrones de diseño se implementan mal). Se necesita experiencia para decidir dónde son apropiados los patrones de diseño, y aún más para decidir cómo implementarlos de manera más apropiada en un lenguaje particular.
stinky472
25

Práctica práctica práctica. Creo que de 4 a 5 libros es incluso un ejercicio de lectura excesivo sin una buena cantidad de práctica. Creo que la mejor manera de hacer esto es comenzar a refactorizar sus proyectos actuales utilizando los patrones. O si no tiene ningún proyecto en el que esté trabajando activamente, simplemente hágalo a su manera y luego intente refactorizar los patrones .

No puedes apreciarlos completamente si no has sufrido los problemas que resuelven. Y tenga en cuenta que no son balas de plata: no necesita memorizarlas y presionar con fuerza para aplicarlas sobre la marcha. Mis dos centavos..

utku_karatas
fuente
15

Hágase estas preguntas:

¿Qué hacen?

¿Qué desacoplan / pareja?

¿Cuándo deberías usarlos?

¿Cuándo no deberías usarlos?

¿Qué característica de idioma faltante los haría desaparecer?

¿En qué deuda técnica incurres al usarlo?

¿Hay una manera más simple de hacer el trabajo?

gtrak
fuente
14
y finalmente pregúntese de dónde obtener respuestas a todas las preguntas mencionadas anteriormente
Jatin Dhoot
@JatinDhoot pensando ...
gtrak
8

He descubierto que es un poco difícil comprender o comprender los beneficios de algunos patrones hasta que uno comprende los problemas que resuelven y la otra (peor) forma en que se han implementado.

Aparte de los libros GOF y POSA, realmente no he leído ninguno, así que no puedo darle otras recomendaciones. Realmente solo tiene que tener una comprensión de los dominios de problemas y creo que muchos desarrolladores menos experimentados pueden no ser capaces de apreciar los beneficios de los patrones. Esto no es leve contra ellos. Es mucho más fácil adoptar, comprender y apreciar buenas soluciones cuando uno tiene que luchar con alternativas pobres primero.

Buena suerte

Tim
fuente
+1 para comprender los problemas que están destinados a resolver. El desafío es ver los problemas de primera mano (en un proyecto real que tiene importancia personal). Demasiados problemas de ejemplo en libros están (sobre) simplificados. Una de las razones por las que me gusta el libro Head First Design Patterns es que muestran algunos de los problemas con las soluciones ingenuas y cuán insostenibles son esas soluciones. Luego presentan el patrón y qué tan limpio está ... Mira Decorador en ese libro, por ejemplo.
Fuhrmanator
8

Se han dado muchos buenos ejemplos. Me gustaría agregar uno:

Mal aplicarlos. No es necesario que lo haga intencionalmente, sucederá cuando intente aplicarlos en su diseño-patrón-ajuste inicial. Durante ese tiempo, cada problema que verá parecerá encajar exactamente en un patrón de diseño. A menudo, todos los problemas parecen encajar en el mismo patrón de diseño por alguna razón (Singelton es un candidato principal para eso).

Y aplicará el patrón y será bueno. Y algunos meses después, necesitará cambiar algo en el código y ver que usar ese patrón en particular no fue tan inteligente, porque se codificó en una esquina y necesita refactorizar nuevamente.

De acuerdo, esa no es realmente una respuesta de hazlo y lo aprenderás en 21 días, pero en mi experiencia es más probable que te dé una buena idea del asunto.

Joachim Sauer
fuente
7

¿Has leído "Patrones de diseño explicados", por Allan Shalloway.

Este libro es muy diferente de otros libros de patrones de diseño porque no es tanto un catálogo de patrones, sino que principalmente presenta una forma de descomponer un espacio problemático que se asigna fácilmente a los patrones.

Los problemas se pueden descomponer en dos partes: cosas que son comunes y cosas que varían. Una vez hecho esto, asignamos las cosas comunes a una interfaz y las cosas que varían según la implementación. En esencia, muchos patrones caen en este "patrón".

Por ejemplo, en el patrón de Estrategia, las cosas comunes se expresan como el contexto de la estrategia, y las partes variables se expresan como estrategias concretas.

Este libro me pareció muy estimulante en contraste con otros libros de patrones que, para mí, tienen el mismo grado de emoción que leer una guía telefónica.

Phillip Ngan
fuente
6

¿Has probado el libro Gang of Four?

Patrones de diseño: elementos de software orientado a objetos reutilizables

Rohit
fuente
77
No recomendaría ese libro como un libro "revelador" :)
Geo
73
Lo recomendaría como un libro que cierra los ojos. Algunas páginas de este tomo antes de acostarse y su insomnio serán cosa del pasado.
Dónal
2
Vine aquí después cuando me sentí dormido en medio del día mientras leía este libro. buscado "comprensión de patrones de diseño". Encontré la publicación. encontré el comentario de arriba. me alegró el día. de acuerdo con los demás, es un libro que cierra los ojos
aimme
4

He dirigido algunos grupos de discusión de patrones de diseño ( nuestro sitio ) y he leído 5 o 6 libros de patrones. Recomiendo comenzar con el libro Head First Design Patterns y asistir o comenzar un grupo de discusión. El libro Head First puede parecer un poco Hasboro al principio, pero a la mayoría de la gente le gusta después de leer uno o dos capítulos.

Utilice el recurso excepcional: una guía de aprendizaje de Joshua Kereivisky para diseñar patrones para ordenar los patrones y ayudar a su grupo de discusión. Por experiencia, el único cambio que sugiero para ordenar es poner la Estrategia primero. La mayoría de los desarrolladores de hoy en día han experimentado una buena o mala encarnación de una Fábrica, por lo que comenzar con la Fábrica puede generar mucha conversación y confusión sobre el patrón. Esto tiende a centrarse en cómo estudiar y aprender patrones, lo cual es bastante esencial para eso. primera cita.

JB Brown
fuente
3

Recomiendo HeadFirst DesignPattern. Leer el libro no es suficiente, después de asimilar los conceptos que necesita para encontrar las respuestas a muchas preguntas que surgen en su mente y tratar de descubrir las aplicaciones de la vida real en las que se pueden utilizar estos patrones. Estoy haciendo lo mismo y comencé a hacer preguntas, incluso esas preguntas parecen tontas.

Rajkumar Vasan
fuente
2

Mi sugerencia sería una combinación de implementar algunos de ellos y analizar algunas implementaciones de ellos. Por ejemplo, dentro de .Net, hay usos de patrones de adaptadores si mira Adaptadores de datos, así como algunos otros si uno profundiza un poco en el marco.

JB King
fuente
2

No sé sobre el mejor libro, pero los puristas podrían decir Patrones de diseño: elementos de software orientado a objetos reutilizables

En cuanto a mi favorito personal, me gustan los patrones de diseño de Head First publicados por O'Reilly. Está escrito en una voz conversacional que me atrae. Cuando lo leí, revisé mi código fuente al mismo tiempo para ver si se aplicaba a lo que estaba leyendo. Si lo hizo, refactoré. Así es como aprendí la Cadena de responsabilidad.

Práctica práctica práctica.

Jason Slocomb
fuente
2

Los patrones de diseño son solo herramientas, como funciones de biblioteca similares. Si sabe que están allí y su función aproximada, puede sacarlos de un libro cuando sea necesario.

No hay nada de mágico en los patrones de diseño, y cualquier buen programador descubrió el 90% de ellos antes de que saliera algún libro. En su mayor parte, considero que los libros son más útiles para definir simplemente los nombres de los diversos patrones para que podamos analizarlos más fácilmente.

Bill K
fuente
2

La forma en que aprendí los patrones de diseño es escribiendo mucho software realmente terrible. Cuando tenía unos 12 años, no tengo idea de lo que era bueno o malo. Acabo de escribir montones de código de espagueti. Durante los siguientes 10 años más o menos, aprendí de mis errores. Descubrí lo que funcionaba y lo que no. Inventé de forma independiente la mayoría de los patrones de diseño comunes, por lo que cuando escuché por primera vez qué eran los patrones de diseño, me emocioné mucho al conocerlos, y luego me decepcionó que solo fuera una colección de nombres para cosas que ya sabía intuitivamente. (esa broma acerca de enseñarte a ti mismo C ++ en 10 años no es realmente una broma)

Moraleja de la historia: escribe mucho código. Como otros han dicho, practica, practica, practica. Creo que hasta que comprenda por qué su diseño actual es malo y busque una mejor manera, no tendrá una buena idea de dónde aplicar varios patrones de diseño. Los libros de patrones de diseño deberían proporcionarle una solución refinada y una terminología común para discutirlo con otros desarrolladores, no una solución integrada para un problema que no comprende.

rmeador
fuente
2

La idea de que leer patrones de diseño, practicar la codificación no va a ayudar realmente a la OMI. Cuando lea estos libros 1. Busque el problema básico que resuelve un patrón de diseño en particular, comenzar con Patrones de creación es su mejor opción. 2. Estoy seguro de que ha escrito código en el pasado, analice si enfrentó los mismos problemas que los patrones de diseño tienen como objetivo proporcionar una solución. 3. Intente rediseñar / refactorizar el código o quizás comenzar de nuevo.

Sobre los recursos puedes consultar estos

  1. www.dofactory.com
  2. Patrones de diseño: elementos de software orientado a objetos reutilizables (serie de informática profesional Addison-Wesley) por Erich Gamma, Richard Helm, Ralph Johnson y John M. Vlissides
  3. Patrones de arquitectura de aplicaciones empresariales por Martin Fowler

1 es un inicio rápido, 2 será un estudio en profundidad ... 3 explicará o debería hacerle pensar lo que aprendió en 2 ajustes en el software empresarial.

Mis 2 centavos ...

Codificador perpetuo
fuente
1

Creo que también es difícil estudiar patrones de diseño. Tiene que saber más sobre OOP y algunas experiencias con el desarrollo de aplicaciones medianas a grandes. Para mí, estudio como grupo de desarrolladores para hacer una discusión. Seguimos una guía de aprendizaje para diseñar patrones que han completado el estudio de patrones. Hay desarrolladores de C # y JavaScript que se unen. Para mí, lo más elegante es que los códigos de escritura del desarrollador de C # en JavaScript y el desarrollador de JavaScript hacen lo mismo para los códigos de C #. Después de dejar una reunión, también investigo y leo algunos libros en casa para revisar. La mejor manera de entender más y recordar en mi mente es hacer blogs con ejemplos en C # y JavaScript aquí http://tech.wowkhmer.com/category/Design-Patterns.aspx .

Sugeriría primero antes de ir a cada patrón de diseño, por favor, comprenda el nombre de los patrones. Además, si alguien conoce el concepto, simplemente explique y dé un ejemplo no solo de programación sino también en el mundo de la lectura.

por ejemplo:

Método de fábrica

Leer mundo: solo doy dinero $ 5, $ 10 o $ 20 y producirá pizza de regreso sin saber nada acerca de cómo se produce, solo obtengo una pizza pequeña, mediana o grande dependiendo del aporte de dinero para poder comer o hacer lo que sea.

Programación: el cliente simplemente pasa el valor del parámetro $ 5, $ 10 o $ 20 al método de fábrica y devolverá el objeto Pizza. Entonces el cliente puede usar ese objeto sin saber cómo se procesa.

No estoy seguro de que esto pueda ayudarte. Depende del nivel de conocimiento de las personas que se unen a la reunión.

Vorleak Chy
fuente
El segundo enlace en respuesta está muerto.
Pang
1

Creo que debe examinar algunos de los problemas que ha encontrado como desarrollador cuando se quitó el pelo después de tener que revisar su código por décima vez debido a otro cambio de diseño. Probablemente tenga una lista de proyectos en los que sintió que había mucho trabajo y dolor.

De esa lista puede derivar los escenarios que los patrones de diseño pretenden resolver. ¿Ha habido algún momento en el que necesitaras realizar la misma serie de acciones en diferentes conjuntos de datos? ¿Necesitará poder tener una capacidad futura para una aplicación pero desea evitar reelaborar toda su lógica para las clases existentes? Comience con esos escenarios y regrese al catálogo de patrones y sus respectivos problemas que se supone que deben resolver. Es probable que vea algunas coincidencias entre GoF y su biblioteca de proyectos.

David Robbins
fuente
1

Para un principiante, los patrones de Head First Design harían, una vez que estemos familiarizados con todos los patrones, intente visualizar los objetos en tiempo real en esos patrones.

El libro lo ayudará a comprender los conceptos básicos, a menos que hasta que lo haya implementado en el mundo real NO PUEDE ser un MAESTRO de los PATRONES DE DISEÑO

gmhk
fuente