wake-up-neo.net

Come studiare i modelli di progettazione?

Ho letto circa 4-5 libri sui modelli di progettazione, ma ancora non mi sento di avvicinarmi al livello intermedio nei modelli di progettazione?

Come dovrei andare a studiare modelli di design?

C'è qualche buon libro per modelli di design?

So che questo verrà solo con l'esperienza, ma ci deve essere un modo per dominarli?

352
anand

Il modo migliore è iniziare a programmare con loro. Gli schemi di progettazione sono un concetto eccezionale che è difficile applicare semplicemente leggendo su di essi. Prendi alcune implementazioni di esempio che trovi online e accumula intorno a loro.

Una grande risorsa è la pagina Data & Object Factory . Esaminano gli schemi e forniscono esempi concreti e reali. Anche il loro materiale di riferimento è fantastico.

195
Joseph Ferris

Ho letto tre libri e ancora non ho capito molto bene gli schemi finché non ho letto Head First Design Patterns di OReilly. Questo libro ha aperto i miei occhi e mi ha davvero spiegato bene.

alt text

203
Darren C

I miei due centesimi per questa e quella vecchia domanda

Alcune persone già menzionate, pratica e refactoring. Credo che l'ordine giusto per conoscere i modelli sia questo:

  1. Impara il Test Driven Development (TDD)
  2. Impara il refactoring
  3. Scopri i modelli

La maggior parte delle persone ignora 1, molti credono di poterlo fare 2 e quasi tutti vanno dritto per 3.

Per me la chiave per migliorare le mie capacità di software era imparare TDD. Potrebbe essere un lungo periodo di codifica dolorosa e lenta, ma scrivere i tuoi test ti fa sicuramente pensare molto al tuo codice. Se una classe ha bisogno di una quantità eccessiva di piastre o si rompe facilmente, inizi a notare che i cattivi odori sono abbastanza veloci

Il principale vantaggio di TDD è che si perde la paura di refactoring del codice e si costringe a scrivere classi che sono altamente indipendenti e coesi. Senza una buona serie di test, è troppo doloroso toccare qualcosa che non sia rotto. Con la rete di sicurezza, ti avventurerai davvero in drastiche modifiche al tuo codice. Questo è il momento in cui puoi davvero iniziare ad imparare dalla pratica.

Ora arriva il punto in cui devi leggere libri sui modelli e, a mio parere, è una totale perdita di tempo provare troppo. Ho solo capito i pattern molto bene dopo aver notato che ho fatto qualcosa di simile, o che avrei potuto applicarlo al codice esistente. Senza i test di sicurezza, o le abitudini di refactoring, avrei aspettato un nuovo progetto. Il problema dell'uso di modelli in un nuovo progetto è che non si vede come influiscono o cambiano un codice funzionante. Ho solo capito un pattern software dopo aver refactored il mio codice in uno di essi, mai quando ne ho introdotto uno nuovo nel mio codice.

85
SystematicFrank

Derek Banas ha realizzato tutorial su youtube per disegnare modelli che mi piacciono molto:

http://www.youtube.com/playlist?list=PLF206E906175C7E07

Possono essere un po 'brevi nel tempo, ma i suoi tempi e la presentazione li rendono molto divertenti da imparare.

59
Pedro Duarte

Pratica, pratica, pratica.

Puoi leggere di suonare il violoncello per anni, e ancora non essere in grado di mettere un arco allo strumento e creare qualcosa che suoni come la musica.

I modelli di progettazione sono meglio riconosciuti come un problema di alto livello; uno che è rilevante solo se si ha l'esperienza necessaria per riconoscerli come utili. È positivo che tu riconosca che sono utili, ma a meno che tu non abbia visto situazioni in cui potrebbero applicare o aver applicato, è quasi impossibile capire il loro vero valore.

Dove diventano utili è quando si riconoscono modelli di progettazione nel codice degli altri, o si riconosce un problema nella fase di progettazione che si adatta bene a un modello; e quindi esaminare lo schema formale ed esaminare il problema, e determinare quale sia il delta tra di loro, e cosa dice sia del modello che del problema.

È proprio come la codifica; K & R potrebbe essere la "bibbia" per C, ma leggerlo cover-to-cover più volte non dà solo un'esperienza pratica; non c'è rimpiazzo per esperienza.

35
Paul Sonier

Pratica pratica pratica. Penso che da 4 a 5 libri sia anche un esercizio di lettura eccessivo senza una buona dose di pratica. Il modo migliore per farlo, credo, è iniziare rifattorizzare i tuoi progetti attuali utilizzando i modelli. O se non hai progetti su cui stai lavorando attivamente allora fallo a modo tuo e poi prova a rifactoring ai pattern.

Non puoi apprezzarli pienamente se non hai sofferto dei problemi che risolvono. E tieni presente che non sono proiettili d'argento - non è necessario memorizzarli e spingerli con forza per applicarli al volo. I miei due centesimi..

25
utku_karatas

Porsi queste domande:

Cosa fanno?

Cosa disaccoppiano/coppia?

Quando dovresti usarli?

Quando non dovresti usarli?

Quale caratteristica della lingua mancante li farebbe andare via?

Che debito tecnico hai dovuto usarlo?

C'è un modo più semplice per portare a termine il lavoro?

14
gtrak

Ho scoperto che è un po 'difficile comprendere o comprendere i benefici di alcuni modelli finché non si comprendono i problemi che risolvono e gli altri (peggiori) modi in cui i problemi sono stati implementati.

Oltre ai libri GOF e POSA, non ne ho letti davvero nessuno, quindi non posso darti altri consigli. In realtà devi solo avere una comprensione dei domini dei problemi e penso che molti sviluppatori meno esperti potrebbero non essere in grado di apprezzare i benefici dei modelli. Questo non è niente contro di loro. È molto più facile abbracciare, comprendere e apprezzare le buone soluzioni quando si deve lottare prima con alternative povere.

In bocca al lupo

8
Tim

Sono stati dati molti buoni esempi. Mi piacerebbe aggiungerne uno:

Esprimi male. Non hai bisogno di farlo intenzionalmente, accadrà quando proverai ad applicarli nel tuo Design-Pattern-fit iniziale. Durante quel tempo ogni singolo problema che vedrai sembrerà adattarsi esattamente a un modello di design. Spesso i problemi sembrano adattarsi allo stesso schema di progettazione per qualche ragione (Singelton è un candidato primario per questo).

E applicherai il modello e sarà buono. E alcuni mesi dopo dovrai modificare qualcosa nel codice e vedere che l'utilizzo di quel particolare modello non è così intelligente, perché sei stato codificato in un angolo e devi rifattorici di nuovo.

Certo, non è davvero una risposta da fare-e-tu-impara-a-21 giorni, ma nella mia esperienza è più probabile che tu ti dia una buona idea in merito.

8
Joachim Sauer

Hai letto "Design Patterns Explained", di Allan Shalloway.

Questo libro è molto diverso dagli altri libri di design perché non è tanto un catalogo di schemi, ma principalmente presenta un modo di scomporre uno spazio problematico che si adatta facilmente ai modelli.

I problemi possono essere scomposti in due parti: cose che sono comuni e cose che variano. Una volta fatto, mappiamo le cose comuni a un'interfaccia e le cose che variano a un'implementazione. In sostanza, molti modelli cadono in questo "modello".

Per esempio nel modello della strategia, le cose comuni sono espresse come contesto della strategia, e le parti variabili sono espresse come strategie concrete.

Ho trovato questo libro altamente stimolante in contrasto con altri libri di modelli che, per me, hanno lo stesso grado di eccitazione di leggere un elenco telefonico.

5
Phillip Ngan
5
Rohit

Per i libri, consiglierei Design Patterns Explained , e Head First Design patterns . Per imparare davvero questi modelli, dovresti guardare il tuo codice esistente. Cerca quali modelli stai già utilizzando. Guarda code odori e quali modelli potrebbero risolverli.

5
David Nehme

Ho guidato alcuni gruppi di discussione sui modelli di progettazione ( il nostro sito ) e ho letto 5 o 6 libri di modelli. Raccomando di iniziare con il libro Head First Design Patterns e di partecipare o iniziare un gruppo di discussione. Il primo libro potrebbe sembrare un po 'Hasboro all'inizio, ma alla maggior parte della gente piace leggere dopo un capitolo o due.

Usa la risorsa in sospeso - Joshua Kereivisky's A Learning Guide to Design Patterns per l'ordinamento del modello e per aiutare il tuo gruppo di discussione. Per esperienza, l'unico cambiamento che suggerisco è quello di mettere la Strategia al primo posto. La maggior parte degli sviluppatori di oggi ha sperimentato qualche buona o cattiva incarnazione di una Factory, quindi partire da Factory può portare a molte conversazioni e confusioni sul pattern. Questo tende a focalizzarsi su come studiare e apprendere modelli che è piuttosto essenziale in quel primo incontro.

4
JB Brown

Raccomando HeadFirst DesignPattern. Leggere il libro non è sufficiente, dopo aver assimilato i concetti necessari per trovare le risposte per molte domande che sorgono nella tua mente e cercare di trovare le applicazioni della vita reale in cui questi modelli possono essere utilizzati. Sto facendo lo stesso e ho iniziato a fare domande, anche quelle domande sembrano sciocche.

3
Rajkumar Vasan

La nozione che legge schemi di progettazione, pratica codificandoli non aiuterà realmente l'IMO. Quando leggi questi libri 1. Cerca il problema di base risolto da un particolare modello di progettazione, iniziando con i modelli di creazione è la soluzione migliore. 2. Sono sicuro che hai scritto codice in passato, analizza se hai affrontato gli stessi problemi che gli schemi di progettazione mirano a fornire una soluzione. 3. Provare a riprogettare/re codice di fattore o forse iniziare fresco.

A proposito di risorse è possibile controllare questi

  1. www.dofactory.com
  2. Patterns di progettazione: elementi del software riutilizzabile orientato agli oggetti (Addison-Wesley Professional Computing Series) di Erich Gamma, Richard Helm, Ralph Johnson e John M. Vlissides
  3. Modelli di Enterprise Application Architecture di Martin Fowler

1 è rapido, 2 sarà approfondito. 3 spiegherà o dovrebbe farti riflettere su ciò che hai imparato in 2 versioni di software aziendale.

I miei 2 centesimi ...

2
Perpetualcoder

Il mio suggerimento sarebbe una combinazione di implementarne alcuni e analizzarne alcune implementazioni. Ad esempio, all'interno di .Net, ci sono usi dei modelli di adattatori se si guardano gli adattatori di dati, così come altri se si fa un po 'di scavo nel framework.

2
JB King

Non conosco il miglior libro, ma i puristi potrebbero dire Design Patterns: Elements of Reusable Object-Oriented Software

Per quanto riguarda il mio preferito, mi piace Head First Design Patterns pubblicato da O'Reilly. È scritto in una voce di conversazione che mi attrae. Quando l'ho letto, ho rivisto il mio codice sorgente allo stesso tempo per vedere se si applicava a ciò che stavo leggendo. Se lo ha fatto, ho refactored. Questo è il modo in cui ho imparato Chain of Responsibility.

Pratica - Pratica - Pratica.

2
Jason Slocomb

I modelli di progettazione sono solo strumenti, un po 'come le funzioni di libreria. Se sai che sono lì e la loro funzione approssimativa, puoi andare a scavare fuori da un libro quando necessario.

Non c'è nulla di magico nei modelli di design, e ogni buon programmatore ha capito il 90% di loro stessi prima che uscissero tutti i libri. Per la maggior parte, considero i libri più utili semplicemente a definire i nomi per i vari modelli in modo da poterli discutere più facilmente.

2
Bill K

Il modo in cui ho imparato i modelli di progettazione è scrivendo un sacco di software davvero terribile. Quando avevo circa 12 anni, non avevo idea di cosa fosse buono o cattivo. Ho appena scritto un mucchio di codice spaghetti. Nei 10 anni successivi ho imparato dai miei errori. Ho scoperto cosa ha funzionato e cosa no. Ho inventato autonomamente la maggior parte dei modelli di progettazione comuni, quindi quando ho sentito per la prima volta quali erano gli schemi di progettazione, ero molto eccitato all'apprenderli, quindi mi ha molto deluso che fosse solo una raccolta di nomi per cose che conoscevo già intuitivamente. (questa battuta sull'insegnamento del C++ in 10 anni non è in realtà uno scherzo)

Morale della trama: scrivi un sacco di codice. Come altri hanno detto, pratica, pratica, pratica. Penso che finché non comprenderete perché il vostro attuale design è cattivo e andate a cercare un modo migliore, non avrete una buona idea di dove applicare i vari modelli di design. I modelli di progettazione dovrebbero fornire una soluzione raffinata e una terminologia comune per discuterne con altri sviluppatori, non una soluzione incolla a un problema che non si capisce.

2
rmeador

Per un principiante, i modelli di Head First Design farebbero, una volta che avremo familiarità con tutti i pattern, quindi proveremo a visualizzare gli oggetti in tempo reale in quei pattern.

Il libro ti aiuterà a capire i concetti di base, a meno che, fino a quando non ti sarai implementato nel mondo reale, TUOI sarai un MASTER dei DESIGN PATTERN

1
gmhk

Penserei che sia anche difficile studiare i modelli di progettazione. Devi sapere di più su OOP e alcune esperienze con lo sviluppo di applicazioni medio-grandi. Per me, studio come un gruppo di sviluppatori per discutere. Seguiamo A Learning Guide To Design Patterns che hanno completato lo studio dei modelli. Ci sono sviluppatori di C # e JavaScript che si uniscono. È una cosa di fantasia per me è il codice di scrittura dello sviluppatore C # in JavaScript e lo sviluppatore JavaScript fa la stessa cosa per i codici C #. Dopo che ho lasciato un incontro, ho anche studiato e letto alcuni libri a casa da recensire. Il modo migliore per capire di più e ricordare nella mia mente è di fare blog con esempi sia in C # sia in JavaScript qui http://tech.wowkhmer.com/category/Design-Patterns.aspx .

Vorrei suggerire prima di andare ad ogni modello di design per favore capire il nome dei modelli. Inoltre, se qualcuno conosce il concetto, ti preghiamo di spiegare e dare un esempio non solo di programmazione, ma nel mondo di lettura.

per esempio:

Metodo di fabbrica:

Leggi il mondo: do solo $ 5, $ 10 o $ 20 e restituirò la pizza senza sapere nulla di come si produce, ho solo una pizza piccola, media o grande che dipende dall'input di denaro in modo da poter mangiare o fare qualsiasi cosa.

Programmazione: il client trasmette il valore del parametro $ 5, $ 10 o $ 20 al metodo factory e restituirà l'oggetto Pizza indietro. Quindi il client può usare quell'oggetto senza sapere come viene elaborato.

Non sono sicuro che questo possa aiutarti. Dipende dal livello di conoscenza delle persone che partecipano all'incontro.

1
Vorleak Chy

Penso che sia necessario esaminare alcuni dei problemi che hai riscontrato come sviluppatore in cui ti sei strappato i capelli dopo aver dovuto rivedere il codice per la decima volta a causa di un altro cambio di progettazione. Probabilmente hai una lista di progetti in cui hai sentito che ci sono state molte rielaborazioni e dolori.

Da tale elenco è possibile ricavare gli scenari che i Pattern Design intendono risolvere. C'è stato un momento in cui è necessario eseguire la stessa serie di azioni su diversi insiemi di dati? Avrai bisogno di essere in grado di capacità future per un'applicazione, ma vuoi evitare di rielaborare tutta la tua logica per le classi esistenti? Inizia con quegli scenari e torna al catalogo dei modelli e ai loro rispettivi problemi che dovrebbero risolvere. È probabile che tu veda alcune corrispondenze tra il GoF e la tua libreria di progetti.

1
David Robbins