2009-05-23 12 views

risposta

19

Suggerirei Inversione di controllo/Iniezione di dipendenza. Questo è molto utile quando si esegue il test delle unità in quanto consente di fornire dipendenze fittizie per la classe in prova. Il proxy è anche molto utile quando si esegue il wrapping di una classe sigillata per renderlo più utilizzabile negli scenari di test.

Se faccio un altro suggerimento, vorrei concentrarmi sull'apprendimento quali modelli sono utili in diverse situazioni piuttosto che concentrarsi sull'imparare come implementare un particolare modello. È quasi sempre possibile trovare un'implementazione di riferimento da utilizzare quando si implementa un pattern, ma essere in grado di discernere quando e quale pattern utilizzare renderà i pattern più utili. Se cominci a farlo nell'altro modo, finisci per far sì che il tuo problema si adatti ai modelli che conosci piuttosto che applicare il modello corretto che si adatta al problema.

+2

PLUS PLUS ON: "Vorrei concentrarmi sull'apprendimento di quali schemi sono utili in diverse situazioni piuttosto che concentrarsi sull'imparare come implementare un particolare modello." Il più grande problema con i modelli di progettazione è che gli sciocchi li usano in modo inappropriato, perché leggono il libro, e credono che il libro dice che è "giusto" quando in realtà non dice nulla di simile ... GOF è esplicitamente "una scatola di strumenti". NON è una meta-ricetta obbligatoria. – corlettk

+1

+1 per il secondo paragrafo della risposta. È molto più utile visualizzare i modelli di progettazione come un vocabolario per descrivere soluzioni comuni a problemi comuni. Chiedere quali modelli di progettazione imparare prima è come chiedere quali parole mediche si dovrebbero memorizzare prima per diventare dottore. –

0

Singleton viene utilizzato molto molto pesantemente in molti luoghi. Anche il pattern Adapter viene utilizzato molto frequentemente. Questi due sono tra i più usati e sono relativamente semplici; comprenderli può essere utile per comprendere i modelli e può essere utile per il tuo sviluppo.

+2

Singleton è fondamentalmente deprecato, principalmente perché tutto ciò che il singleton non può essere testato senza il singleton. Ad esempio: è possibile testare un DAO senza un database utilizzando gli stub ad eccezione del metodo dang.c.conn(). Ma sì, lo vedrete molto nel codice esistente, ed è ancora troppo comunemente usato. ConnectionFactory.getInstance() potrebbe restituire la stessa connessione ogni volta, senza bloccarti in un'implantologia. – corlettk

4

Penso che l'utilità dei modelli di progettazione risieda più nel vocabolario aggiunto che li accompagna, più che nell'usare un singolo (o un paio) di modelli. Avere una conoscenza pratica degli schemi comuni nel libro Gang of Four è estremamente utile quando si cerca di comunicare con altri sviluppatori.

Suggerirei di leggere l'indice, quindi di leggere il riepilogo del catalogo dei motivi. Se sei limitato per un po 'di tempo, sapere in generale che cosa simboleggiano i modelli sarebbe utile in modo che quando hai bisogno di conoscere i dettagli di un modello sapresti dove guardare. Questo è in contrasto con la conoscenza dello stato o dei modelli di Singleton sulle loro piccole isole.

7

Perché non leggere un riepilogo di essi, this summary for example, e vedere se alcuni sembrano essere utili a , e vale la pena indagare ulteriormente.

2

Fabbrica astratta. Utilizzato in Dipendenza iniezione (DI).
Se lo capisci, sai come funziona DI in fondo, e quindi sai cos'è Inversion of Control.

6

I modelli di progettazione non sono il tipo di argomento che si inizia rapidamente a leggere e imparare. Dovrai fare molti esercizi e poi applicare ciò che hai imparato in scenari reali. Se il tuo tempo è davvero così limitato, potresti perdere tempo. Suggerisco il libro Head First Design Patterns, che è eccellente.

Ma la vostra conoscenza di OO dovrebbe essere ad un livello abbastanza alto per iniziare.

+0

+1 Ottimo libro per iniziare a imparare Design Patters con –

1

Il pattern "Command" è un po 'più complesso di Abstract Factory, ma è comunemente usato e potente.

Un altro schema che non ho mai avuto davvero una buona possibilità di usare è il pattern "Composite". Questo ti darà una buona esposizione alle tecniche OO e potrebbe rivelarsi utile se ti capiterà mai di averne bisogno.

6

La tua domanda è come chiedere: "Voglio imparare C# ma ho solo il tempo di imparare alcune parole chiave. Quali dovrei imparare?"

Qualsiasi modello di progettazione non vive nel vuoto, tutti definiscono aspetti diversi del modo in cui un'applicazione si unisce. È improbabile che qualsiasi app abbia bisogno di tutti i modelli di progettazione noti, ma ogni app è diversa e tu Avrai bisogno di una combinazione diversa di essi per ogni app, sapendo cosa non usare è importante quanto sapere cosa usare: hai almeno una conoscenza colloquiale di tutti i modelli di progettazione principali

Inizia con this listHead First Design Patterns libro menzionato in precedenza qui. Impara un po 'su tutti loro e non preoccuparti di non avere il tempo - prendi il tempo! Esci da FaceBook un paio di notti extra o salta uno o due repliche di Star Trek

Inoltre, evitare dapprima the GoF patterns book a meno che non si sia veramente un guru OO. È abbastanza denso e immediatamente assumi capisci il valore e il bisogno di schemi. È un bel libro, non proprio un ottimo primo libro.

+0

"Sapere cosa non usare è importante quanto sapere cosa usare." Amen fratello. – corlettk

+0

Posso parafrasare che: GOF è "ok" se un programmatore esperto, in OO (preferibile) o procedurale (come me) che stava/sta imparando OO ... esperienze ti dà la comprensione prerequisito del " motivazioni di ordine superiore "di progettazione del software veramente buona. Diciamo solo che GOF non è per niente. – corlettk

+0

Sono d'accordo, corlettk. Sono un rifugiato io stesso. –

1

Ho pensato che "Flyweight" fosse uno schema molto interessante che in realtà non aveva alcuna relazione con nient'altro. (Ad esempio, non avresti mai deciso di utilizzare un altro modello al suo posto.)

Ma se hai intenzione di imparare solo un modello, "Visitatore" è quello che vuoi. È un concetto che si estende molto al di fuori della programmazione OO; ti aiuterà a capire concetti di programmazione funzionale come map e fold. O anche metodi OO come collect e inject.

1

La strategia è nella mia lista. È un ottimo modo per liberare il codice di logica condizionale che è lì solo per supportare l'esistenza di molteplici modi di fare le cose, e aiuta ad estrarre il codice "policy" in modo che possa essere testato separatamente.

1

Il GoF (Gang of Four) libro raccomanda questi come un inizio: (in "Guida ai lettori" nel libro)

iniziare con la più semplice e la maggior parte modelli comuni:

  1. Abstract Factory
  2. adattatore
  3. Composite
  4. Decorator
  5. Factory Method
  6. Observer
  7. strategia
  8. Template Method
1

Ho sempre sentito personalmente che non si "impara" design patterns ... si impara a "riconoscere" loro. In altre parole, quando ho letto Design Patterns per la prima volta, molti di loro sembravano soluzioni che si presentavano spontaneamente in applicazioni che avevo creato prima, ma forse non l'ho fatto esattamente nello stesso modo o in modo pulito.

A mio parere, Design Patterns è più sulla standardizzazione delle soluzioni che si sono materializzate più volte che su come risolvere un particolare problema.