Apprendimento / implementazione di modelli di progettazione (per principianti) [chiuso]


85

Sono un principiante confuso e un programmatore hobbista che cerca di ottenere un controllo su questo, quindi perdonami se la mia domanda è un po 'sbagliata o non ha molto senso.

Vedo molte domande su SO che ruotano attorno all'uso di modelli di progettazione e mi chiedo se qualcuno abbia buone risorse per apprendere e implementare modelli di progettazione. Capisco l'idea generale e so come / quando usarne un paio (Singletons, Factory methods) ma so che mi sto perdendo.

(Nel caso sia importante, la mia lingua preferita è C # ma potrei imparare da esempi in altre lingue)

Risposte:


84

Head First Design Patterns

testo alternativo

e la pagina Wikipedia di Design Pattern sono le migliori risorse per i principianti. FluffyCat è un'altra buona risorsa online gratuita per modelli di progettazione sia in Java che in PHP .

Il libro Gang of Four è dove andare dopo, ma è abbastanza avanzato, quindi aspetterei fino a quando non avrai una comprensione abbastanza solida delle altre risorse.


4
Ci sono esempi di codice C # per Head First Design Patterns disponibili su msquaredweb.com/DesignPatterns/…
toolkit

5
Ho guardato quel libro ... lo odiavo. Così ho preso il libro di GoF e da lì ho imparato tutto sui modelli di design. Era un po 'asciutto, ma molto più istruttivo.
Thomas Owens,

1
Inizialmente pensavo che il primo libro di testa sarebbe stato completamente nauseante (è pesante sulla metafora, a parte e ha un tono molto colloquiale) .. ma in realtà è davvero inventivo e informativo; Sono molto felice di aver corso il rischio e di averlo comprato. Imo, scegliere banda di quattro = masochismo inutile.
codeinthehole

2
Ho trovato il primo libro in testa completamente nauseante. Passa così tanto tempo a essere "divertente", penso che comunichi male le idee chiave - si perdono. Leggerlo è come guardare il papà di qualcuno che cerca di essere cool. Ma il libro di GoF è l'altro estremo e quindi non per tutti.
Draemon

2
@ Bill: lo so, ma sono d'accordo con i commenti di @Thomas e @Draemon. I miei amici non orientati alla programmazione che avevano consigliato questa serie di libri per gli algoritmi delle classi di programmazione, li odiavano e finivano su libri "più asciutti" perché la quantità di informazioni per pagina era più alta. È solo una questione di preferenza. Leggo libri tecnici sin dalla giovane età e ho frequentato un liceo altamente tecnico, che deve avermi fatto leggere libri "asciutti". Preferisco i libri che non hanno animali domestici che mi parlano e sviano, ma piuttosto semplici informazioni da assimilare.
Esteban Küber

27

I modelli di design sono ottimi per vari motivi:

  1. ti dà un punto di partenza per risolvere problemi comuni.
  2. offre agli sviluppatori un vocabolario per parlare di certi modi di risolvere i problemi in modo molto compatto.
  3. quando si lavora con sviluppatori che conoscono i modelli di progettazione e si utilizzano modelli di progettazione nelle soluzioni, capiranno le soluzioni molto più velocemente.

Ma quando il tuo obiettivo è solo imparare i modelli di progettazione, penso che ti manchino i fondamenti. Tutti i modelli di progettazione si basano su principi più comuni. Principio aperto chiuso ad alta coesione, basso accoppiamento, DRY, principio di sostituzione di Liskov ecc. Per questi fondamenti leggerei i seguenti libri in questo ordine:

  1. Head First Analisi e progettazione orientata agli oggetti (Head First) [ILLUSTRATO] (Brossura)
  2. Applicazione di UML e modelli (copertina rigida)
  3. Principi, schemi e pratiche agili in C # (Serie Robert C. Martin) (Rilegato)

Dopodiché sei pronto per la banda di base di quattro modelli di design

  1. Head First Design Patterns (Head First) [ILLUSTRATED] (Brossura)
  2. La Bibbia
  3. Un bel sito (non comprare niente, non ne vale la pena) http://dofactory.com/Patterns/Patterns.aspx (alcune implementazioni di questo sito meritano una discussione

Il prossimo passo:

  1. Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series) (Rilegato)
  2. I libri POSA

E ricorda sempre: lo schema non è l'obiettivo!


2
Penso che i fondamenti dell'OO (incapsulamento, ereditarietà, polimorfismo, ecc.) Siano sufficienti alla conoscenza per iniziare ad apprendere i modelli di progettazione. Puoi apprendere gli altri principi (alta coesione, principio aperto chiuso a basso accoppiamento, DRY, principio di sostituzione di Liskov, ecc.) Attraverso schemi di apprendimento.
Bill the Lizard,

Sono d'accordo che puoi imparare i modelli di progettazione solo con i fondamenti di OO. Ma poi arrivi al punto che puoi far funzionare un modello ma non capisci ancora del tutto perché questo è un buon design, quali compromessi hai fatto e come puoi apportare variazioni ai modelli.
KeesDijk

20

Aggiungerei che il libro Design Patterns dalla "Gang of four" è una bibbia per chiunque sia seriamente interessato ai modelli di design.


12
O per chiunque voglia dire ai propri amici programmatori che hanno letto il libro Gang of Four :)
Dave Markle

14

Il mio consiglio:

Leggi molto sui modelli da diverse fonti.

Cercare di forzare il maggior numero di modelli possibile in tutto il codice che stai scrivendo poiché questo punto non darà buoni risultati. Invece, lascia che le informazioni restino nel tuo cervello per un po '(leggi: mesi).

All'improvviso ti ritroverai a incappare in un problema o in un pezzo di codice e ricorderai vagamente di aver visto qualcosa che potrebbe funzionare come una soluzione a questo particolare problema. Ora è il momento di cercare i dettagli sul modello a cui stai pensando e provare ad applicarlo.

Questo è quello che ha funzionato per me, comunque.


9

Modelli di progettazione

Questo sito tutorial contiene le seguenti sottosezioni

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

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


Ho trovato il sito web molto utile. Buoni esempi chiari.
Augustas




4

Consiglierei di dare un'occhiata alla quintologia (?) Di Jean Paul Boodhoo su Demystifying Design Patterns su DNRtv, URL forniti di seguito. I videocast toccano Singleton, Abstract Factory tra gli altri, con la differenza che puoi guardarlo programmare mentre discute la teoria. Buono da guardare durante il pranzo in un giorno piovoso.

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


DnrTV non funziona! È un vero peccato perché gli screen cast di Boodhoo sono informativi. Hai visto i video ospitati altrove? Hai i file video, sarei felice di tenerli online.
Stephan Luis

4

Un'annotazione ai commenti sopra.

Un riferimento rapido per i pattern GOF

Ecco un buon punto in cui puoi avviare dofactory.com/patterns/patterns.aspx : puoi trovare il collegamento a ciascun modello, insieme alle implementazioni corrispondenti.

Tuttavia, ricorda che questi sono modelli GOF. Potrebbe essere necessario leggere e comprendere anche modelli avanzati, una volta acquisita sufficiente esperienza in OOAD. Head First Design Patterns è un buon inizio e, dopo aver fatto dei progressi, passa agli Enterprise Application Architecture Patterns di Martin Fowler.

Applicazione di modelli di design - Il processo di pensiero

Un altro aspetto principale: applicare i modelli di progettazione è importante quanto conoscerli. Anche leggere questi articoli potrebbe aiutarti.

Applicazione di Design Patterns Parte I

Applicazione di modelli di progettazione Parte II

Spero che sia di aiuto


3

Head First Design Patterns è buono come altri già annotati. Oltre a questo, ovviamente il libro originale e C # Design Patterns. Inoltre ci sono buoni siti web già menzionati.

Oltre all'autoapprendimento, consiglio vivamente di iniziare o frequentare un gruppo di studio sui modelli nella tua zona. Vedere una guida all'apprendimento per progettare modelli per la spiegazione e un ottimo ordine per studiare i modelli. Lo abbiamo fatto e posso dire onestamente che non avrei capito tanto quanto ora. Un incontro settimanale con altre persone interessate ti tiene sorprendentemente disciplinato quando impari qualcosa di astratto come i modelli di design.

Buoni studi!


3

Prima di spendere soldi per i libri, consiglierei l'eccellente pagina dei modelli di design di Wikipedia . Anche per qualcosa di diverso Google per "screencast design pattern" o ricerca di "design pattern" su YouTube . Ottenere le stesse informazioni presentate in modo diverso spesso aiuta a far cadere il penny.

Il libro Gang of Four è il testo definitivo sui modelli più conosciuti ma non è così facile da leggere e con esempi C ++ non è il preferito da tutti.

Il testo Head First Design Patterns è molto più accessibile, ma contiene solo un sottoinsieme dei pattern Gang of Four.

La cosa più importante è capire dove e perché un particolare pattern è utile. Successivamente cerca nel web esempi di implementazione nella lingua che preferisci e sperimenta finché non "capisci". Comprendi uno schema prima di passare a quello successivo. Tutti comprendono alcuni schemi meglio di altri (e ce ne sono centinaia di quelli meno conosciuti).

Continua a collegarti.



2

Patterns of Enterprise Application Architecture (Hardcover) di Martin Fowler

Refactoring to Patterns (Rilegato) di Joshua Kerievsky

Continuous Integration: Improving Software Quality and Reducing Risk (Paperback) di Paul Duval et.al.

Oltre l'architettura software: creazione e supporto di soluzioni vincenti (Paperback) di Luke Hohmann


2

I design pattern sono come qualsiasi funzione di libreria, leggete informazioni su di essi, quindi quando sorge un problema, il design pattern sarà nella vostra "cassetta degli attrezzi". Ci sono molti libri di modelli di design tutti modellati sugli schemi originali di "Gang of four".

Per qualsiasi programmatore, penso che e il libro Refactoring di Fowler siano i requisiti minimi assoluti.


I libri POSA non erano "modellati sul libro del GOF" - il GOF è stato il primo ad essere pubblicato - erano in produzione nello stesso momento.
Tim

1
Solo per evitare confusione, voglio dire che la MAGGIOR PARTE dei modelli di progettazione NON sono implementati in una libreria. Molti modelli vengono formati combinando insieme classi di libreria.
Bill the Lizard

Ho fatto sembrare che potessero essere fatti in una biblioteca - mi dispiace, grazie per il chiarimento, Bill. I modelli di progettazione sono generalmente COME librerie ma cose che non puoi in genere METTERE in una libreria, come i diversi modi in cui le classi sconosciute interagiscono tra loro.
Bill K


2

Il libro originale di Design Patterns è una lettura obbligata per tutti i programmatori.

È un libro eccellente a tutti i livelli: layout, chiarezza, intuizione, profondità. È uno di quei grandi libri che leggi prima dall'inizio alla fine e poi usi come riferimento finché non lo conosci letteralmente alla rovescia.

Potresti iniziare dalla pagina di Wikipedia , ma concediti anche questo fantastico libro.


2

Applicazione di UML e modelli di Craig Larman. Inizia dalle basi dell'analisi, del design e utilizza un semplice scenario Case. Presenta la maggior parte dei modelli di base in modo semplice.


2

Se leggi dei design pattern noterai che Java sembra averne implementati alcuni.

Guarda la fonte per qualsiasi framework e puoi raccogliere informazioni sui modelli di progettazione. Personalmente non li vedo adattarsi perfettamente a nessuno dei miei codici, a volte gli esempi nei libri e nei tutorial sembrano un po 'idealizzati, specialmente per il programmatore solitario.

I modelli di progettazione non sono per programmatori pigri.


2

Per me ei miei colleghi studiamo Design Pattern che segue su Pattern Study Group . Preparano un elenco di ogni modello che dovremmo imparare in ordine e hanno anche le domande di apertura che rendono più discussione in gruppo.


1

Suggerisco anche di fare un salto in Refactoring to Patterns dopo aver letto Head First Design Patterns.

Nota: gli esempi di codice sono in Java, ma dovrebbero essere molto simili agli esempi C # ...


1

Non ha molto senso per me che qualcuno con poca esperienza approfondisca troppo i modelli di design. È bello sapere che esistono, ma a questo punto dovresti concentrarti maggiormente su altre cose piuttosto che imparare solo sui modelli di progettazione.

Sono utili nel contesto di un problema - come concetto per uno sviluppatore nuovo / principiante non sono davvero un valore pratico a parte la consapevolezza che dovresti usarli quando e dove puoi.

EDIT Per chiarire: molti design pattern sono il risultato di problemi riscontrati in alcuni domini. Difficilmente ci si può aspettare che un nuovo programmatore (IMO) conosca i modelli di progettazione da utilizzare per una serie di problemi. Proprio come otteniamo un'infarinatura di algoritmi negli studi CS, abbiamo bisogno di una comprensione delle cose che possiamo fare con i modelli e dei loro benefici, ma quando una persona sta ancora costruendo un mondo hello o scoprendo stl non c'è molto bisogno pratico di modelli di progettazione. I modelli sono fantastici. Ma non sono il proiettile d'argento.

(Né CASE (strumenti), né è / era UML, né è SCRUM, né è TDD, né STL, né Java, né XML, ecc.) Questi sono tutti solo aspetti della nostra professione e trattare questi argomenti come il secondo venire è ingenuo.


Ma se non conosci gli schemi, non saprai se ce n'è uno là fuori che risolve il tuo problema particolare. Sì, come novellino è improbabile che tu abbia BISOGNO di uno schema, ma è importante imparare gli schemi prima che sorga tale necessità.
Elie

Penso di averlo trattato nel mio post ...
Tim

Hai bisogno di qualcosa di più che sapere che esistono ... devi sapere come funzionano e il tipo di situazioni in cui vengono utilizzati. È un po 'più di una conoscenza superficiale. Potrebbero volerci anni prima di usare uno schema, ma quando lo fai, non è il momento di imparare lo schema.
Elie

Quindi stai dicendo che un principiante deve imparare e capire dozzine o più di schemi? Cosa viene fuori dal tavolo nel frattempo? Non sto discutendo contro i modelli. E non penso nemmeno che imparare le specifiche di un pattern JIT sia una cosa negativa. Modelli di apprendimento prima di altre cose IMO non è utile
Tim

1

I pattern comprendono il vocabolario di alto livello che i programmatori usano per parlare di disegno astratto. Se stai riutilizzando una soluzione astratta, è utile fare riferimento ad essa per nome. Se inventi un modello, è professionale fare un piccolo controllo per assicurarti che non sia già stato assegnato un nome. Se è stato nominato, la descrizione può essere utile.

Dopo aver codificato anche un po ', ti accorgerai di scrivere qualcosa di simile a quello che hai codificato prima. Questo è uno schema. Anche se è un modello minuscolo, vale la pena notare. C'è uno schema migliore? Vedi alcuni piccoli schemi che cooperano insieme per risolvere un problema più grande? Bene la prossima volta, quando vuoi risolvere un problema più grande, l'intero schema ti viene in mente come un singolo pezzo. Completare le righe dettagliate del codice diventa meccanico.

Più noti i modelli, più facile diventa la programmazione e più apprezzerai alcuni dei modelli migliori e più grandi elaborati da altri programmatori. Prova a padroneggiare il pattern MVC. In un modo o nell'altro, le variazioni si presentano ovunque, anche in piccole decisioni di progettazione.


1

Una volta compreso il concetto, passa attraverso il codice sorgente o il design di Eclipse, molti ottimi esempi di questi modelli (nessuna sorpresa, Gamma è stato uno dei designer).


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.