Aprendizaje / implementación de patrones de diseño (para principiantes) [cerrado]

85

Soy un programador novato y aficionado confundido que intenta controlar esto, así que perdóname si mi pregunta es un poco errónea o no tiene mucho sentido.

Veo muchas preguntas sobre SO que giran en torno al uso de patrones de diseño, y me pregunto si alguien tiene buenos recursos para aprender e implementar patrones de diseño. Entiendo la idea general y sé cómo / cuándo usar un par de ellos (métodos Singleton, Factory) pero sé que me lo estoy perdiendo.

(En caso de que importe, mi idioma de preferencia es C # pero podría aprender de ejemplos en otros idiomas)

Ashlocke
fuente

Respuestas:

84

Patrones de diseño de Head First

texto alternativo

y la página de Wikipedia de Design Pattern son los mejores recursos para principiantes. FluffyCat es otro buen recurso en línea gratuito para patrones de diseño tanto en Java como en PHP .

El libro Gang of Four es adónde ir después, pero está bastante avanzado, así que esperaría hasta que tengas una comprensión bastante firme de los otros recursos.

Bill el lagarto
fuente
4
Hay ejemplos de código C # para Head First Design Patterns disponibles en msquaredweb.com/DesignPatterns/…
toolkit
5
Miré ese libro ... lo odié. Así que tomé el libro GoF y aprendí todo sobre patrones de diseño a partir de ahí. Fue algo seco, pero mucho más informativo.
Thomas Owens
1
Inicialmente pensé que el primer libro iba a ser completamente nauseabundo (tiene muchas metáforas, aparte, y tiene un tono muy conversacional) ... pero en realidad es realmente inventivo e informativo; Estoy muy feliz de haber tomado el riesgo y lo compré. Imo, eligiendo pandillas de cuatro = masoquismo innecesario.
codeinthehole
2
Encontré el primer libro completamente nauseabundo. Pasa tanto tiempo siendo "divertido" que creo que comunica mal las ideas clave, se pierden. Leerlo es como ver al papá de alguien tratando de ser genial. Pero el libro de GoF es el otro extremo y, por lo tanto, no es para todos.
Draemon
2
@Bill: Lo sé, pero estoy de acuerdo con los comentarios de @Thomas y @Draemon. Amigos míos no orientados a la programación que recomendaron esta serie de libros para algoritmos de clases de programación, los odiaron y terminaron en libros más "secos" porque la cantidad de información por página era mayor. Es solo una cuestión de preferencia. He estado leyendo libros técnicos desde que era joven y fui a una escuela secundaria altamente técnica, eso debe haberme acostumbrado a leer libros "secos". Prefiero los libros que no tienen mascotas que me critiquen y se desvíen, sino más bien información simple para asimilar.
Esteban Küber
27

Los patrones de diseño son excelentes por varias razones:

  1. le da una base para resolver problemas comunes.
  2. proporciona a los desarrolladores un vocabulario para hablar sobre ciertas formas de resolver problemas de una manera muy compacta.
  3. cuando trabaje con desarrolladores que conocen patrones de diseño y usted usa patrones de diseño en sus soluciones, ellos comprenderán las soluciones mucho más rápido.

Pero cuando tu objetivo es solo aprender patrones de diseño, creo que te estás perdiendo los fundamentos. Todos los patrones de diseño se basan en principios más comunes. Principio abierto cerrado de alta cohesión, acoplamiento bajo, DRY, principio de sustitución de Liskov, etc. Para estos fundamentos, leería los siguientes libros en este orden:

  1. Head First Análisis y diseño orientado a objetos (Head First) [ILUSTRADO] (Tapa blanda)
  2. Aplicación de UML y patrones (tapa dura)
  3. Principios, patrones y prácticas ágiles en C # (Serie Robert C. Martin) (Tapa dura)

Después de eso, estará listo para el grupo básico de cuatro patrones de diseño.

  1. Patrones de diseño Head First (Head First) [ILUSTRADO] (Tapa blanda)
  2. La biblia
  3. Un buen sitio web (no compre nada, no vale la pena) http://dofactory.com/Patterns/Patterns.aspx (algunas implementaciones de este sitio merecen una discusión

El siguiente paso:

  1. Patrones de arquitectura de aplicaciones empresariales (Addison-Wesley Signature Series) (tapa dura)
  2. Los libros de la POSA

Y recuerda siempre: ¡el patrón no es el objetivo!

KeesDijk
fuente
2
Creo que los fundamentos de OO (encapsulación, herencia, polimorfismo, etc.) son suficientes para que el conocimiento comience a aprender patrones de diseño. Puede aprender los otros principios (alta cohesión, principio abierto cerrado de bajo acoplamiento, DRY, principio de sustitución de Liskov, etc.) a través de patrones de aprendizaje.
Bill the Lizard
Estoy de acuerdo en que puede aprender patrones de diseño solo con los fundamentos de OO. Pero luego llega al punto en que puede hacer que un patrón funcione, pero aún no comprende completamente por qué es un buen diseño, qué compensaciones ha hecho y cómo puede hacer variaciones en los patrones.
KeesDijk
20

Yo añadiría que el libro Design Patterns de la "Gang of four" es una biblia para cualquiera que esté seriamente interesado en los patrones de diseño.

Leopold Cimrman
fuente
12
O para cualquiera que quiera decirles a sus amigos programadores que han leído el libro Gang of Four :)
Dave Markle
14

Mi consejo:

Lea mucho sobre los patrones de diferentes fuentes.

Intentar forzar tantos patrones como sea posible en todo el código que está escribiendo, ya que este punto, no dará buenos resultados. En cambio, deje que la información descanse dentro de su cerebro por un tiempo (lea: meses).

De repente, se encontrará tropezando con un problema o fragmento de código y recordará vagamente que ha visto algo que podría funcionar como una solución a este problema en particular. Ahora es el momento de buscar los detalles del patrón en el que estás pensando e intentar aplicarlo.

Eso es lo que me ha funcionado, de todos modos.

Lars A. Brekken
fuente
9

Patrones de diseño

Este sitio de tutoriales contiene las siguientes subsecciones

  • Intención de cada patrón de diseño
  • Estructura del mundo real para el patrón de diseño
  • Una declaración de problema
  • Discusión detallada sobre el problema
  • Lista de verificación sobre cómo llegar a un patrón
  • Reglas generales al llegar al patrón.
  • Fragmentos de código para el patrón de diseño que incluye C #, C ++, Delphi, Java y PHP

Este sitio también contiene una guía sobre Anti Patrones , UML y Refactorización .

pramodc84
fuente
Encontré el sitio web muy útil. Buenos y claros ejemplos.
Augustas
8

Bruce Eckel tiene un libro sobre patrones de diseño , aunque es Java, es como todos sus libros asombrosos. ¡Y lo mejor es que son gratis!

Jan Gressmann
fuente
Gracias por el enlace, no me di cuenta de que estaba disponible en línea de forma gratuita.
James McMahon
5

Un libro introductorio que encontré útil y bien escrito es Design Patterns Explained por Alan Shalloway y James Trott (Addison Wesley).

texto alternativo

No , no empezar desde la banda de los cuatro libros, ya que no es un libro de introducción por cualquier medio.

Federico A. Ramponi
fuente
4

Recomendaría echar un vistazo a la quintología (?) De Jean Paul Boodhoo sobre Desmitificación de patrones de diseño en DNRtv, URL que se proporcionan a continuación. Las transmisiones de video tocan a Singleton, Abstract Factory, entre otros, con la diferencia de que puedes verlo codificar mientras discute la teoría. Es bueno vigilar el almuerzo en un día lluvioso de la semana.

http://www.dnrtv.com/default.aspx?showNum=63 http://www.dnrtv.com/default.aspx?showNum=65 http://www.dnrtv.com/default.aspx?showNum= 68 http://www.dnrtv.com/default.aspx?showNum=71 http://www.dnrtv.com/default.aspx?showNum=92

David Pike
fuente
¡DnrTV está caído! Es una lástima porque las proyecciones de pantalla de Boodhoo son informativas. ¿Has visto los videos alojados en otro lugar? ¿Tiene los archivos de video? Me complacerá mantenerlos en línea.
Stephan Luis
4

Una anotación a los comentarios anteriores.

Una referencia rápida para patrones GOF

Este es un buen lugar donde puede comenzar dofactory.com/patterns/patterns.aspx : puede encontrar un enlace a cada patrón, junto con las implementaciones correspondientes.

Sin embargo, recuerde que estos son patrones GOF. Es posible que también deba leer y comprender patrones avanzados, una vez que obtenga suficiente experiencia en OOAD. Head First Design Patterns es un buen comienzo y, después de hacer algunos progresos, opte por los patrones de arquitectura de aplicaciones empresariales de Martin Fowler.

Aplicación de patrones de diseño: el proceso de pensamiento

Otro aspecto principal: aplicar patrones de diseño es tan importante como simplemente conocerlos. La lectura de estos artículos también puede ayudarlo.

Aplicación de patrones de diseño, parte I

Aplicación de patrones de diseño, parte II

Espero que esto ayude

asombrado
fuente
3

Head First Design Patterns es bueno, como otros ya se han mencionado. Además de esto, por supuesto, el libro original y C # Design Patterns. También hay buenos sitios web ya mencionados.

Además del autoaprendizaje, recomiendo seriamente comenzar o asistir a un grupo de estudio de patrones en su área. Consulte Una guía de aprendizaje para diseñar patrones para obtener una explicación y un gran orden para estudiar los patrones. Hicimos esto y puedo decir honestamente que no entendería tanto como ahora. Una reunión semanal con otras personas interesadas lo mantiene sorprendentemente disciplinado cuando aprende algo abstracto como patrones de diseño.

¡Felices estudios!

mmiika
fuente
3

Antes de gastar dinero en libros, recomendaría la excelente página de patrones de diseño de Wikipedia . También para algo diferente, Google para "screencasts de patrones de diseño" o busque "patrones de diseño" en YouTube . Obtener la misma información presentada de manera diferente a menudo ayuda a bajar el centavo.

El libro Gang of Four es el texto definitivo sobre los patrones más conocidos, pero no es tan fácil de leer y, con ejemplos de C ++, no es el favorito de todos.

El texto Head First Design Patterns es mucho más accesible, pero solo contiene un subconjunto de los patrones Gang of Four.

Lo más importante es comprender dónde y por qué es útil un patrón en particular. Luego, busque en la web ejemplos de implementación en el idioma de su elección y experimente hasta que "lo obtenga". Comprenda un patrón antes de pasar al siguiente. Todos comprenden algunos patrones mejor que otros (y hay cientos de patrones menos conocidos).

Sigue conectándote.

Royd Brayshay
fuente
2

Patrones de arquitectura de aplicaciones empresariales (tapa dura) por Martin Fowler

Refactorización de patrones (tapa dura) por Joshua Kerievsky

Integración continua: mejora de la calidad del software y reducción del riesgo (rústica) por Paul Duval et.al.

Más allá de la arquitectura de software: creación y mantenimiento de soluciones ganadoras (rústica) por Luke Hohmann

Elie
fuente
2

Los patrones de diseño son como cualquier función de biblioteca, lea sobre ellos, luego, cuando surja un problema, el patrón de diseño estará en su "Caja de herramientas". Hay muchos libros de patrones de diseño, todos con el patrón de los patrones de diseño originales de "Gang of four".

Para cualquier programador, creo que eso y el libro Refactoring de Fowler son los requisitos mínimos absolutos.

Bill K
fuente
Los libros de la POSA no estaban "inspirados en el libro del GOF" - el GOF resultó ser el primero en publicarse - estaban en producción al mismo tiempo.
Tim
1
Solo para evitar confusiones, quiero decir que la MAYORÍA de los patrones de diseño NO se implementan en una biblioteca. Muchos patrones se forman combinando clases de biblioteca.
Bill the Lizard
Hice que pareciera que se podían hacer en una biblioteca, lo siento, gracias por la aclaración, Bill. Los patrones de diseño son generalmente bibliotecas LIKE, pero cosas que normalmente no se pueden PONER en una biblioteca, como diferentes formas en que las clases desconocidas entre sí interactúan.
Bill K
2

El libro de Patrones de Diseño original es una lectura obligada para todos los programadores.

Es un libro excelente en todos los niveles: diseño, claridad, perspicacia, profundidad. Es uno de esos grandes libros que primero lees de principio a fin y luego lo usas como referencia hasta que literalmente lo conoces de adentro hacia afuera.

Puede comenzar por la página de Wikipedia , pero también disfrute del gran libro.

ddaa
fuente
2

Aplicación de UML y patrones por Craig Larman. Comience desde lo básico de análisis, diseño y utilice un escenario de caso simple. Presenta la mayoría de los patrones básicos de forma sencilla.

skinp
fuente
2

Si lee sobre patrones de diseño, notará que Java parece tener algunos de ellos implementados.

Mire la fuente de cualquier marco y podrá obtener información sobre patrones de diseño. Personalmente, no veo que encajen perfectamente en ninguno de mis códigos, a veces los ejemplos en libros y tutoriales parecen un poco idealizados, especialmente para el codificador solitario.

Los patrones de diseño no son para codificadores perezosos.

Peter Turner
fuente
2

Para mí y mis colegas, estudiamos Design Pattern siguiendo el Pattern Study Group . Preparan una lista de cada patrón que debemos aprender en orden y también tienen las preguntas de apertura que hacen más discusión en grupo.

Samnang
fuente
1

También sugiero tener un shufty en la refactorización de patrones una vez que haya leído Head First Design Patterns.

Nota: Los ejemplos de código están en Java, pero deberían ser muy similares a los ejemplos de C # ...

caja de herramientas
fuente
1

Para mí no tiene mucho sentido que alguien con muy poca experiencia profundice demasiado en los patrones de diseño. Es genial saber que existen, pero en este punto debes centrarte más en otras cosas en lugar de solo aprender sobre patrones de diseño.

Son útiles en el contexto de un problema: como concepto para un desarrollador nuevo / principiante, en realidad no tienen demasiado valor práctico, aparte de saber que debe utilizarlos cuando y donde pueda.

EDITAR Para aclarar, muchos patrones de diseño son el resultado de problemas encontrados en algunos dominios. Difícilmente se puede esperar que un nuevo programador (OMI) conozca el patrón o patrones de diseño que debe usar para algunos problemas. Así como obtenemos un puñado de algoritmos en los estudios de CS, necesitamos comprender las cosas que podemos hacer con los patrones y sus beneficios, pero cuando una persona todavía está construyendo hola mundo o descubriendo stl, no hay mucha necesidad práctica de patrones de diseño. Los patrones son geniales. Pero no son la solución milagrosa.

(Ni CASE (herramientas), ni es / fue UML, ni SCRUM, ni TDD, ni STL, ni Java, ni XML, etc.) Estos son solo aspectos de nuestra profesión y tratar estos temas como el segundo venir es ingenuo.

Tim
fuente
Pero si no conoce los patrones, no sabrá si hay uno que aborde su problema particular. Sí, como novato es poco probable que NECESITES un patrón, pero es importante aprender los patrones antes de que surja esa necesidad.
Elie
Creo que cubrí eso en mi publicación ...
Tim
Necesita tener algo más que saber que existen ... necesita saber cómo funcionan y el tipo de situaciones en las que se utilizan. Eso es un poco más que un conocimiento superficial. Pueden pasar años antes de que uses un patrón, pero cuando lo haces, no es el momento de aprender el patrón.
Elie
¿Entonces estás diciendo que un novato tiene que aprender y comprender docenas o más de patrones? ¿Qué sale de la mesa mientras tanto? No estoy discutiendo contra patrones. Y tampoco creo que aprender los detalles de un patrón JIT sea algo malo. Aprender patrones antes que otras cosas IMO no es útil
Tim
1

Los patrones comprenden el vocabulario de alto nivel que usan los programadores para hablar sobre diseño abstracto. Si está reutilizando una solución abstracta, es útil referirse a ella por su nombre. Si inventa un patrón, es profesional verificar un poco para asegurarse de que no se le haya dado un nombre. Si ha sido nombrado, entonces la descripción puede ser útil.

Después de codificar aunque sea un poquito, notará que escribe algo similar a lo que codificó antes. Este es un patrón. Incluso si es un patrón pequeño, vale la pena notarlo. ¿Existe un patrón mejor? ¿Ve ciertos patrones diminutos cooperando juntos para resolver un problema mayor? Bueno, la próxima vez, cuando desee resolver un problema mayor, todo el patrón vendrá a su mente como un solo fragmento. Desarrollar las líneas detalladas de código se vuelve mecánico.

Cuanto más observe los patrones, más fácil se volverá la programación y más apreciará algunos de los mejores y más grandes patrones elaborados por otros programadores. Intente dominar el patrón MVC. De una forma u otra, las variaciones aparecen por todas partes, incluso en pequeñas decisiones de diseño.

dongilmore
fuente
1

Una vez que comprenda el concepto, revise el código fuente o el diseño de Eclipse, muchos ejemplos realmente buenos de estos patrones (no es de extrañar, Gamma fue uno de los diseñadores).

Uri
fuente