Esiste un libro canonico sui modelli di design? [chiuso]


49

Sono interessato all'apprendimento dei modelli di progettazione e vorrei sapere quali sono considerati libri di alto livello nell'apprendimento di questa materia.

Esiste un libro là fuori che è di fatto lo standard per descrivere le migliori pratiche, le metodologie di progettazione e altre informazioni utili sui modelli di progettazione? Che dire di quel libro lo rende speciale?


Non sono sicuro se questo è ciò a cui stai pensando, ma trovo molte cose di sviluppo intelligenti su Forrst .
Trey Piepmeier,

2
Che ne dici di un titolo di "Fonti di riferimento per modelli di progettazione" o "Risorse di modelli di progettazione" (dal momento che non intendo "riferimento" come "ricerca su richiesta") e spostare tutte le cose dell'elenco nel corpo (o rimuoverlo )?


Per alcune implementazioni decenti, davo un'occhiata a quelle su dofactory (però non ho comprato i libri).
Steven Evers,

4
Dato che questa domanda ha ricevuto una risposta completa e completa, ho chiuso le altre domande sui modelli di design come duplicati di questa per designarla come domande e risposte canoniche e coppia di risposte per questo argomento.

Risposte:


58

Schemi di progettazione: elementi di software riutilizzabile orientato agli oggetti si avvicina molto alla mia definizione di libro canonico sugli schemi di progettazione. Secondo il suo articolo di Wikipedia (il mio accento è mio):

La data di pubblicazione originale del libro era il 21 ottobre 1994 con un copyright del 1995 e, a partire da luglio 2010, il libro era alla sua 38a stampa . Il libro è stato reso disponibile per la prima volta al pubblico durante l'incontro OOPSLA tenutosi a Portland, nell'Oregon, nell'ottobre 1994. È stato molto influente nel campo dell'ingegneria del software ed è considerato un'importante fonte di teoria e pratica del design orientato agli oggetti. Più di 500.000 copie sono state vendute in inglese e in altre 13 lingue .

Ward Cunningham , pioniere dei modelli di design, mantiene un catalogo online dei modelli del libro su WikiWikiWeb . E secondo l'articolo di Wikipedia sul modello di progettazione (di nuovo, il mio accento è mio):

I modelli di design hanno guadagnato popolarità nell'informatica dopo che il libro Design Patterns: Elements of Reusable Object-Oriented Software è stato pubblicato nel 1994 dalla cosiddetta "Gang of Four" (Gamma et al.).

Ci sono molti altri libri a cui si fa riferimento nello stesso articolo come notevoli nel genere:

Di quelli che ho letto il libro di Fowler, è molto influente e una buona lettura. A certi punti è un po 'vago per i miei gusti, ma nel complesso è un libro divertente. C'è un catalogo online dei motivi inclusi nel libro, con descrizioni minime.

Ho anche sfogliato i motivi di Head First Design e, se hai letto qualsiasi altro libro della serie Head First, è della stessa alta qualità e divertente della maggior parte dei libri della serie :

Head First è una serie di libri di testo introduttivi su molti argomenti, pubblicati da O'Reilly Media. Sottolinea una combinazione non ortodossa, visivamente intensa, coinvolgente il lettore di enigmi, battute, design e layout non standard e uno stile accattivante e conversazionale per immergere il lettore in un determinato argomento.

Il termine "modello di progettazione" è alquanto vago, poiché ogni soluzione generale riutilizzabile può essere considerata un modello di progettazione. Ho sempre notato la tendenza ad applicare l'etichetta sulle soluzioni descritte in uno dei libri più importanti che ho elencato sopra, e più specificamente nella banda di quattro e Fowler. I modelli di progettazione non seguono un processo di sviluppo unico, sono normali soluzioni software che sono immensamente riutilizzabili e sono estremamente difficili da identificare .

Ma se si confrontano i cataloghi online di entrambi i libri con i contenuti dei libri specifici per lingua, si noterà che vengono spesso utilizzati come modelli. Quindi direi che entrambi i libri sono molto vicini all'essere riferimenti canonici, con il libro GoF che è il più importante dal punto di vista storico, anche se entrambi i libri sono limitati alla programmazione orientata agli oggetti .


2
+1. In realtà volevo darti +5 ma purtroppo non è permesso.
Dipan Mehta,

L'intera serie di architetture software orientate ai modelli riguarda i modelli in diversi tipi di sistemi - il volume 1 riguarda i modelli architettonici e i modelli che intersecano i domini, il volume 2 riguarda i sistemi concorrenti, il volume 3 riguarda la gestione delle risorse in sistemi di rete / distribuiti, Il volume 4 riguarda i sistemi distribuiti e il volume 5 riguarda i linguaggi di pattern e un riferimento per gli altri 4 volumi. Data la domanda, penso che anche il volume 5 potrebbe essere applicabile, ma non ho ancora passato troppo tempo con esso ... ancora.
Thomas Owens

@Yannis questo e il primo in genere si basano su linguaggi tipizzati statici. Esistono buoni libri per linguaggi dinamici come Python.
ravi404,



23

Head First Design Patterns

In qualsiasi momento, da qualche parte nel mondo qualcuno ha problemi con gli stessi problemi di progettazione del software che hai. Sai che non vuoi reinventare la ruota (o peggio, una gomma a terra), quindi dai un'occhiata a Design Patterns - le lezioni apprese da coloro che hanno affrontato gli stessi problemi. Con Design Patterns, puoi trarre vantaggio dalle migliori pratiche e dall'esperienza degli altri, in modo da poter dedicare il tuo tempo a ... qualcos'altro. Qualcosa di più impegnativo. Qualcosa di più complesso. Qualcosa di più divertente.

Vuoi conoscere i modelli che contano: perché usarli, quando usarli, come usarli (e quando NON usarli). Ma non vuoi solo vedere come appaiono gli schemi in un libro, ma vuoi sapere come appaiono "allo stato brado". Nel loro ambiente nativo. In altre parole, nelle applicazioni del mondo reale. Volete anche imparare come vengono utilizzati i pattern nell'API Java e come sfruttare il supporto dei pattern integrato di Java nel vostro codice.

Vuoi imparare i veri principi di progettazione OO e perché tutto ciò che il tuo capo ti ha detto sull'eredità potrebbe essere sbagliato (e cosa fare invece). Vuoi imparare come questi principi aiuteranno la prossima volta che sei su un torrente senza un modello di progettazione.

Ancora più importante, vuoi imparare il "linguaggio segreto" dei Design Patterns in modo da poter tenere il tuo con il tuo collega (e impressionare gli ospiti del cocktail party) quando menziona casualmente il suo uso incredibilmente intelligente di Command, Facade, Proxy e Fabbrica tra i sorsi di un martini. Potrai facilmente contrastare con la tua profonda comprensione del perché Singleton non è così semplice come sembra, di come la Fabbrica sia così spesso fraintesa o della relazione reale tra Decoratore, Facciata e Adattatore.

Con Head First Design Patterns , eviterai l'imbarazzo di pensare che Decorator sia qualcosa dello spettacolo "Trading Spaces" ...


Questo. È una lettura molto accessibile e ha cambiato completamente il mio approccio all'ingegneria del software.
GSto

2
l'intera prima serie della testa è fantastica, specialmente per gli sviluppatori di partenza.
Thomas Stock,

2
Adoro il libro, ma odio assolutamente la copertina! Un mio collega non programmatore ha camminato nel mio ufficio l'altro giorno, ha visto il libro e ha detto "Capo primo disegnatore Modelli? Stai entrando nel mondo della moda?"
Pete,

1
@Pete Perché la copertina può metterti nei guai. Apparentemente vive una doppia vita. fishbowl.pastiche.org/2005/08/12/…
Gordon,

10

Sì, esiste un libro ben noto sui modelli di progettazione: Modelli di progettazione: elementi di software riutilizzabile orientato agli oggetti e gli autori sono spesso chiamati "la banda di quattro" (GoF) e sono citati in quasi tutti i testi sui modelli di progettazione.



Questo non è un libro sui modelli di design. È un catalogo di modelli. C'è una breve introduzione ai modelli di progettazione all'inizio, ma non penso che l'introduzione sia sufficiente.
Jörg W Mittag,

@ JörgWMittag Non esiste un processo unico di creazione di modelli di progettazione, i modelli di progettazione sono soluzioni riutilizzabili relativamente piccole. I modelli di progettazione sono creati attraverso i normali processi di sviluppo del software, ciò che li distingue è la loro immensa riutilizzabilità. L'unico processo univoco rilevante è l'identificazione di una soluzione come modello di progettazione e i cataloghi lo fanno con precisione.
yannis,

9

Modelli di progettazione: elementi di software riutilizzabile orientato agli oggetti

testo alternativo

Da Wikipedia :

Modelli di progettazione: elementi di software orientato agli oggetti riutilizzabili è un libro di ingegneria del software che descrive soluzioni ricorrenti a problemi comuni nella progettazione del software. Gli autori del libro sono Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides con una prefazione di Grady Booch. Gli autori vengono spesso definiti Gang of Four, GoF o Go4. Il libro è diviso in due parti, con i primi due capitoli che esplorano le capacità e le insidie ​​della programmazione orientata agli oggetti, e i restanti capitoli che descrivono 23 modelli di progettazione software classici. Il libro include esempi in C ++ e Smalltalk.


3

Uno dei migliori siti web di modelli di design in circolazione è il Wiki di Ward, il primo wiki. Vedi http://c2.com/cgi/wiki?HistoryOfPatterns per una buona pagina iniziale in esso.

Nel 1987, Ward e Kent si stavano consultando con il gruppo di sistemi di test dei semiconduttori di Tektronix, che stava avendo problemi a finire un progetto. Decisero di provare le cose che avevano studiato. Come Alexander, che ha affermato che gli occupanti di un edificio dovrebbero progettarlo, Ward e Kent lasciano che i rappresentanti degli utenti (un istruttore e un ingegnere sul campo) finiscano il progetto.

Ward ha escogitato un "linguaggio" a cinque schemi che ha aiutato i progettisti alle prime armi a trarre vantaggio dai punti di forza di Smalltalk ed evitare i suoi punti deboli ...

Ward e Kent erano stupiti dall'eleganza (dichiaratamente spartana) dell'interfaccia progettata dai loro utenti. Hanno riferito i risultati di questo esperimento all'OOPSLA 87 di Orlando. Hanno scritto una posizione in panel e presentato al workshop di Norm Kerth su Da dove provengono gli oggetti? Parlarono di schemi fino a quando non furono blu in faccia e ottennero un sacco di accordo, ma senza schemi più concreti nessuno si iscriveva.

Nel frattempo, Erich Gamma era impegnato a scrivere e riflettere sul design orientato agli oggetti in ET ++ come parte della sua tesi di dottorato. Erich aveva capito che le strutture o i modelli ricorrenti di progettazione erano importanti. La domanda era davvero come catturarli e comunicarli.

Bruce Anderson ha tenuto un discorso a TOOLS 90 in cui ErichGamma era presente; A Erich piaceva il discorso. Bruce ha tenuto un articolo a EcoopOopsla90 (Ottawa) e ha diretto un BOF chiamato Toward an Architecture Handbook in cui lui, Erich Gamma, Richard Helm e altri hanno iniziato a discutere di schemi. Era la prima volta che Richard ed Erich si incontravano e si rendevano conto di condividere idee comuni sulle idee chiave dietro la scrittura di software riutilizzabile OO.

Poco prima di ECOOP'91 Erich Gamma e Richard Helm, seduti su un tetto a Zurigo in una giornata estiva afosa, hanno messo insieme gli inizi molto umili del catalogo di modelli che alla fine sarebbero diventati DesignPatterns ...

Le cose andarono davvero bene al workshop OOPSLA che Bruce tenne nel 1991. Per coincidenza, Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides erano tutti lì; sarebbero poi diventati la banda di quattro che ha creato il libro Design Patterns ...


2

Penso che il refactoring ai pattern possa essere utile semplicemente perché descrive come un certo desing / codice può essere refactored verso i pattern nel libro GoF. Questo può aiutare a superare la curva di apprendimento iniziale. Oh, e contempla anche "Pattern-happiness" :)

È inoltre possibile che i primi tre volumi di architettura software orientata ai modelli siano una buona lettura.


1

Modelli di progettazione

Questo sito tutorial contiene le seguenti sottosezioni

  • Intento di ogni modello di progettazione
  • Real World Structure per il modello di progettazione
  • Una dichiarazione di problema
  • Discussione dettagliata sul problema
  • Elenco di controllo su come arrivare a un modello
  • Regole empiriche quando si arriva al modello.
  • Snippet di codice per il modello di progettazione che include C #, C ++, Delphi, Java e PHP

Questo sito contiene anche una guida su Anti Patterns, UML e Refactoring.


Il sito SourceMaking sembra semplicistico a prima vista, ma è davvero un ottimo riferimento. A parte i modelli di progettazione, alcuni dei modelli di sviluppo, architettura e gestione del progetto sono esilaranti. Le soluzioni refactored possono effettivamente aiutarti a salvare una riunione che va fuori dai binari. (Non male per un riferimento al modello di progettazione)
Qualunque sia il

1

Il libro originale "Design Patterns: Elements of Reusable Object Oriented Software" è una buona risorsa per i modelli di design orientati agli oggetti.

Esistono molti altri libri là fuori. Quando ho bisogno di un rapido riferimento e il mio libro GoF è fuori portata, Wikipedia normalmente ha abbastanza informazioni su questi e altri schemi di progettazione.

Questi sono i principali che uso. Va anche notato che le persone hanno iniziato ad applicare il formato modello ad altre cose, come la gestione dei progetti.

Se vuoi sapere di antipattern, di cui dovresti essere a conoscenza, ci sono due libri, "AntiPatterns: software di refactoring, architetture e progetti in crisi" e "Refactoring: migliorare la progettazione del codice esistente" che contiene una sezione su odori di codice, un altro nome per antipatterns.


1

"Agile Principles, Patterns and Practices in C #" di Robert C. Martin. Penso che abbia anche una versione Java del libro.

Inoltre, non un modello in sé, ma Domain Driven Design ha alcuni grandi concetti anche se non si sceglie l'approccio DDD completo.

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

1

Se sei interessato in modo specifico ai modelli di design in C ++, prova Modern C ++ Design di Andrei Alexandrescu.

Questo libro parla di come implementare modelli comunemente usati come Factory, Singleton e Visitor in C ++. Parla anche di argomenti molto specifici del C ++ come puntatori intelligenti, metaprogrammazione di modelli e progettazione di classi basate su criteri.

L'autore del libro è un autorevole esperto , noto per il suo

lavoro pionieristico sulla progettazione basata su criteri implementata tramite metaprogrammazione dei modelli. Queste idee sono articolate nel suo libro Modern C ++ Design e sono state implementate per la prima volta nella sua biblioteca di programmazione, Loki. Ha anche implementato il concetto di "costruttori di mosse" nella sua libreria MOJO. Ha contribuito al C / C ++ Users Journal con la riga "Generic <Programming>" ...


1
ti dispiacerebbe spiegare di più su ciò che fa e a cosa serve? Le "risposte solo al collegamento" non sono del tutto benvenute presso Stack Exchange
moscerino del

@gnat: come va?
Dima,

beh, la tua recente modifica sembra sicuramente un miglioramento per me. Sebbene i lettori della risposta trarrebbero probabilmente beneficio da una spiegazione più dettagliata di chi è Aleksandresku
moscerino il

@gnat: poiché ovviamente sai chi è, non esitare a modificare la mia risposta.
Dima,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.