¿Existe un libro canónico sobre patrones de diseño? [cerrado]

49

Estoy interesado en aprender patrones de diseño y me gustaría saber qué se consideran libros de primer nivel para aprender este tema.

¿Existe algún libro que sea el estándar de facto para describir las mejores prácticas, metodologías de diseño y otra información útil sobre patrones de diseño? ¿Qué hay de ese libro que lo hace especial?

mW00t
fuente
No estoy seguro de si esto es lo que estás pensando, pero encuentro muchas cosas inteligentes de desarrollo en Forrst .
Trey Piepmeier
2
¿Qué tal un título de "Fuentes de referencia para patrones de diseño" o "Recursos de patrones de diseño" (ya que no me refiero a "referencia" como "buscar bajo demanda") y mover todo el material de la lista al cuerpo (o eliminarlo )?
Para algunas implementaciones decentes, solía echar un vistazo a las de dofactory (aunque no compré los libros).
Steven Evers
44
Dado que esta pregunta recibió una respuesta completa e integral, he cerrado las otras preguntas de patrones de diseño como duplicados de esta para designarla como el canon Q&A y el par de respuestas para este tema.

Respuestas:

58

Patrones de diseño: los elementos del software orientado a objetos reutilizables se acercan mucho a mi definición de libro canónico sobre patrones de diseño. Según su artículo de Wikipedia (énfasis mío):

La fecha de publicación original del libro fue el 21 de octubre de 1994 con un copyright de 1995, y a partir de julio de 2010, el libro estaba en su 38 edición . El libro se puso a disposición del público por primera vez en la reunión de OOPSLA celebrada en Portland, Oregón, en octubre de 1994. Ha tenido una gran influencia en el campo de la ingeniería de software y se considera una fuente importante para la teoría y la práctica del diseño orientado a objetos. Se han vendido más de 500,000 copias en inglés y en otros 13 idiomas .

Ward Cunningham , un pionero de los patrones de diseño, mantiene un catálogo en línea de los patrones del libro en WikiWikiWeb . Y de acuerdo con el artículo de Wikipedia sobre el patrón de diseño (nuevamente, el énfasis es mío):

Los patrones de diseño ganaron popularidad en informática después de que el libro "Patrones de diseño: elementos de software orientado a objetos reutilizables" fuera publicado en 1994 por la llamada "Gang of Four" (Gamma et al.).

Hay muchos otros libros a los que se hace referencia en el mismo artículo como notables en el género:

De los que he leído el libro de Fowler, es muy influyente y una buena lectura. En ciertos puntos es un poco vago para mi gusto, pero en general es un libro agradable. Hay un catálogo en línea de los patrones incluidos en el libro, con descripciones mínimas.

También he hojeado los Patrones de diseño de Head First, y si has leído cualquier otro libro de la serie Head First, es de la misma alta calidad y tan agradable como la mayoría de los libros de la serie :

Head First es una serie de libros de introducción a muchos temas, publicados por O'Reilly Media. Hace hincapié en una combinación poco ortodoxa, visualmente intensiva, que involucra al lector de acertijos, bromas, diseño y diseño no estándar, y un estilo de conversación atractivo para sumergir al lector en un tema determinado.

El término "patrón de diseño" es algo vago, ya que cada solución reutilizable general puede considerarse un patrón de diseño. Siempre he notado una tendencia a aplicar la etiqueta en las soluciones descritas en uno de los libros notables que he enumerado anteriormente, y más específicamente en los libros Gang of Four y Fowler. Los patrones de diseño no siguen un proceso de desarrollo único, son soluciones de software normales que resultan ser inmensamente reutilizables y son extremadamente difíciles de identificar .

Pero si compara los catálogos en línea de ambos libros con el contenido de libros específicos del idioma, notará que a menudo se usan como plantillas. Entonces diría que ambos libros están muy cerca de ser referencias canónicas, siendo el libro GoF el más importante desde una perspectiva histórica, a pesar de que ambos libros están limitados a la programación orientada a objetos .

Yannis
fuente
2
+1. En realidad quería darte +5, pero eso no está permitido.
Dipan Mehta
Toda la serie de Arquitectura de software orientada a patrones trata sobre patrones en diferentes tipos de sistemas: el Volumen 1 trata sobre patrones arquitectónicos y patrones que cruzan dominios, el Volumen 2 trata sobre sistemas concurrentes, el Volumen 3 trata sobre la gestión de recursos en sistemas en red / distribuidos, El Volumen 4 trata sobre sistemas distribuidos, y el Volumen 5 trata sobre lenguajes de patrones, así como una referencia para los otros 4 volúmenes. Ante la pregunta, creo que el Volumen 5 también podría ser aplicable, pero no he pasado demasiado tiempo con él ... todavía.
Thomas Owens
@Yannis este y la cabeza primero generalmente se basa en lenguajes de tipo estáticos. ¿Hay buenos libros para lenguajes dinámicos como python?
ravi404
@ ravi404 norvig.com/design-patterns
whytheq
23

Head First Patrones de diseño

En cualquier momento, en algún lugar del mundo, alguien lucha con los mismos problemas de diseño de software que usted tiene. Sabes que no quieres reinventar la rueda (o peor, una rueda pinchada), por lo que buscas Patrones de diseño, las lecciones aprendidas por aquellos que se han enfrentado a los mismos problemas. Con los Patrones de diseño, puedes aprovechar las mejores prácticas y la experiencia de los demás, para que puedas dedicar tu tiempo a ... algo más. Algo más desafiante. Algo mas complejo. Algo mas divertido.

Desea aprender sobre los patrones que importan: por qué usarlos, cuándo usarlos, cómo usarlos (y cuándo NO usarlos). Pero no solo quiere ver cómo se ven los patrones en un libro, quiere saber cómo se ven "en la naturaleza". En su ambiente nativo. En otras palabras, en aplicaciones del mundo real. También desea aprender cómo se utilizan los patrones en la API de Java y cómo explotar el soporte de patrones incorporado de Java en su propio código.

Desea aprender los verdaderos principios de diseño de OO y por qué todo lo que su jefe le dijo sobre la herencia podría estar equivocado (y qué hacer en su lugar). Desea aprender cómo esos principios ayudarán la próxima vez que suba a un arroyo sin un patrón de diseño.

Lo que es más importante, desea aprender el "lenguaje secreto" de los Patrones de diseño para que pueda defenderse con su compañero de trabajo (e impresionar a los invitados a la fiesta) cuando menciona casualmente su uso increíblemente inteligente de Comando, Fachada, Proxy y Fábrica entre sorbos de un martini. Podrá contrarrestar fácilmente su profunda comprensión de por qué Singleton no es tan simple como parece, cómo la fábrica a menudo se malinterpreta o la relación real entre Decorador, Fachada y Adaptador.

Con Head First Design Patterns , evitará la vergüenza de pensar que Decorator es algo del programa "Trading Spaces" ...

Gordon
fuente
Esta. Es una lectura muy accesible, y cambió la forma en que abordo completamente la ingeniería de software.
GSto
2
toda la serie principal es genial, especialmente para los desarrolladores principiantes.
Thomas Stock
2
¡Amo el libro, pero odio absolutamente la portada! Un colega mío no programador pasó por mi oficina el otro día, vio el libro y dijo " ¿Patrones principales de diseñador ? ¿Vas a entrar en el negocio de la moda?"
Pete
1
@Pete ¿Por qué la cubierta puede meterte en más problemas? Aparentemente vive una doble vida. fishbowl.pastiche.org/2005/08/12/…
Gordon
10

Sí, hay un libro bien conocido sobre patrones de diseño: Patrones de diseño: elementos de software orientado a objetos reutilizables y los autores a menudo se llaman "la banda de los cuatro" (GoF) y se hace referencia en casi todos los textos sobre patrones de diseño.

Jonas
fuente
También el libro de Martin Fowler: amazon.com/Patterns-Enterprise-Application-Architecture-Martin/…
Robert Harvey
Este no es un libro sobre patrones de diseño. Es un catálogo de patrones. Al principio hay una breve introducción a los patrones de diseño, pero no creo que esa introducción sea suficiente.
Jörg W Mittag
@ JörgWMittag No existe un proceso único de creación de patrones de diseño, los patrones de diseño son soluciones reutilizables relativamente pequeñas. Los patrones de diseño se crean a través de los procesos normales de desarrollo de software, lo que los distingue es su inmensa reutilización. El único proceso único relevante es identificar una solución como patrón de diseño, y los catálogos lo hacen con precisión.
Yannis
9

Patrones de diseño: elementos de software reutilizable orientado a objetos.

texto alternativo

De wikipedia :

Patrones de diseño: Elementos del software orientado a objetos reutilizables es un libro de ingeniería de software que describe soluciones recurrentes a problemas comunes en el diseño de software. Los autores del libro son Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides con un prólogo de Grady Booch. A menudo se hace referencia a los autores como la Banda de los Cuatro, GoF o Go4. El libro está dividido en dos partes, con los dos primeros capítulos que exploran las capacidades y las trampas de la programación orientada a objetos, y los capítulos restantes que describen 23 patrones de diseño de software clásicos. El libro incluye ejemplos en C ++ y Smalltalk.

Muelles Myers
fuente
3

Uno de los mejores sitios web de patrones de diseño es Ward's Wiki, el primer wiki. Consulte http://c2.com/cgi/wiki?HistoryOfPatterns para obtener una buena página de inicio.

En 1987, Ward y Kent estaban consultando con el Grupo de Sistemas de Prueba de Semiconductores de Tektronix que estaba teniendo problemas para terminar un diseño. Decidieron probar las cosas del patrón que habían estado estudiando. Al igual que Alexander, quien dijo que los ocupantes de un edificio deberían diseñarlo, Ward y Kent permitieron que los representantes de los usuarios (un entrenador y un ingeniero de campo) terminaran el diseño.

Ward ideó un "lenguaje" de cinco patrones que ayudó a los diseñadores novatos a aprovechar las fortalezas de Smalltalk y evitar sus debilidades ...

Ward y Kent estaban asombrados de la elegancia (ciertamente espartana) de la interfaz que diseñaron sus usuarios. Informaron los resultados de este experimento en OOPSLA 87 en Orlando. Escribieron una posición del panel y presentaron en el taller de Norm Kerth sobre ¿De dónde vienen los objetos? Hablaron de patrones hasta que fueron azules en la cara y llegaron a un gran acuerdo, pero sin patrones más concretos, nadie se inscribió.

Mientras tanto, Erich Gamma estaba ocupado escribiendo y reflexionando sobre el diseño orientado a objetos en ET ++ como parte de su tesis doctoral. Erich se había dado cuenta de que las estructuras o patrones de diseño recurrentes eran importantes. La pregunta realmente era cómo capturarlos y comunicarlos.

Bruce Anderson dio una charla en TOOLS 90 en la que ErichGamma estuvo presente; A Erich le gustó la charla. Bruce dio un artículo en EcoopOopsla90 (Ottawa) y dirigió un BOF llamado Toward an Architecture Handbook donde él, Erich Gamma, Richard Helm y otros entraron en discusiones sobre patrones. Esa fue la primera vez que Richard y Erich se conocieron, y se dieron cuenta de que compartían ideas comunes sobre las ideas clave detrás de la escritura de software OO reutilizable.

Justo antes de ECOOP'91, Erich Gamma y Richard Helm, sentados en una azotea en Zurich en un sofocante día de verano, reunieron los muy humildes comienzos del catálogo de patrones que eventualmente se convertirían en DesignPatterns ...

Las cosas realmente se pusieron en marcha en el taller de OOPSLA que Bruce dirigió en 1991. Casualmente, Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides estaban allí; más tarde se convertirían en la Banda de los Cuatro que fue autor del libro Patrones de diseño ...

Gaurav
fuente
2

Creo que Refactoring to Patterns puede ser útil simplemente porque describe cómo ciertos diseños / códigos se pueden refactorizar hacia patrones en el libro GoF. Esto puede ayudar a superar la curva de aprendizaje inicial. Ah, y también contempla 'Pattern-happiness' :)

También puede encontrar los primeros tres volúmenes de Arquitectura de software orientada a patrones como una buena lectura.

finrod
fuente
1

Patrones de diseño

Este sitio tutorial 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 del problema
  • Discusión detallada sobre el problema.
  • Lista de verificación sobre cómo llegar a un patrón
  • Reglas prácticas 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 Patterns, UML y Refactoring.

pramodc84
fuente
El sitio de SourceMaking parece simplista a primera vista, pero es realmente una gran referencia. Además de los patrones de diseño, algunos de los antipatterns de desarrollo, arquitectura y gestión de proyectos son divertidos. Las soluciones refactorizadas en realidad pueden ayudarlo a salvar una reunión que se está descarrilando. (No está mal para una referencia de patrón de diseño)
sea ​​el
1

El libro original, "Patrones de diseño: elementos de software orientado a objetos reutilizables" es un buen recurso para patrones de diseño orientados a objetos.

Existen muchos otros libros por ahí. Cuando necesito una referencia rápida y mi libro GoF está fuera de alcance, Wikipedia normalmente tiene suficiente información sobre esos y otros patrones de diseño.

Esos son los principales que uso. También se debe tener en cuenta que las personas han comenzado a aplicar el formato del patrón a otras cosas, como la gestión de proyectos.

Si desea saber acerca de los antipatrones, que debe tener en cuenta, hay dos libros, "AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis", así como "Refactoring: Mejorando el diseño de código existente" que tiene una sección sobre olores de código, otro nombre para antipatrones.

indyK1ng
fuente
1

"Principios ágiles, patrones y prácticas en C #" por Robert C. Martin. Creo que también tiene una versión Java del libro.

Además, no es un patrón en sí mismo, pero el diseño impulsado por dominio tiene algunos conceptos excelentes, incluso si no opta por el enfoque DDD completo.

  * Ubiquitous Language
  * Code first approach (vs. DB first)
  * etc.

fuente
1

Si está interesado específicamente en los patrones de diseño en C ++, pruebe Modern C ++ Design de Andrei Alexandrescu.

Este libro habla sobre cómo implementar patrones de uso común como Factory, Singleton y Visitor en C ++. También habla sobre temas muy específicos de C ++, como punteros inteligentes, metaprogramación de plantillas y diseño de clases basado en políticas.

El autor del libro es un experto autorizado , conocido por su

trabajo pionero en diseño basado en políticas implementado mediante metaprogramación de plantillas. Estas ideas se articulan en su libro Modern C ++ Design y se implementaron por primera vez en su biblioteca de programación, Loki. También implementó el concepto de "mover constructores" en su biblioteca MOJO. Contribuyó al C / C ++ Users Journal bajo el título "Generic <Programming>" ...

Dima
fuente
1
¿te importaría explicar más sobre lo que hace y para qué sirve? Las "respuestas de solo enlace" no son bienvenidas en Stack Exchange
mosto
@gnat: ¿cómo es esto?
Dima
bueno, tu edición reciente ciertamente me parece una mejora. Aunque los lectores de la respuesta probablemente se beneficiarían de una explicación más detallada de quién es Aleksandresku
mosquito
@gnat: como obviamente sabes quién es, no dudes en editar mi respuesta.
Dima