2009-06-14 18 views
5

Eventuali duplicati:
How do you know when to use design patterns?Design Patterns

Come posso capire/prendere decisione su "Quando usare cosa Design Pattern"?

Quali sono i fattori da osservare mentre si prendono decisioni sull'utilizzo di un modello di progettazione appropriato in un luogo appropriato?

+3

Hai letto il libro? Leggi il libro. –

+5

Penso che questo possa essere un duplicato di http://stackoverflow.com/questions/85272/how-do-you-know-when-to-use-design-patterns –

+0

Grazie Steve! Il collegamento ha davvero aiutato. –

risposta

3

In generale, se lo stai facendo bene, c'è uno schema per questo. Potresti solo sapere che lo stai usando.

Se si sta facendo male, c'è un anti-pattern per questo. Ma tu sicuramente non sai che lo stai usando.

+0

Divertente (ironico) ma non utile. – ChrisW

2

Gang of Four (GoF) modelli sono una buona risorsa.

+3

Le discussioni nel sito Web di GoF sono molto astratte. Li ho trovati difficili da capire. –

+0

Qualsiasi discussione sui modelli di progettazione sarà astratta. È un concetto di altissimo livello che si applica alla maggior parte delle lingue. La cosa bella del collegamento fornito da Steve è che per ogni modello, ottieni un esempio del mondo reale con un codice reale. Dovresti essere in grado di capire le applicazioni reali da quegli esempi. –

0

Tutti i modelli ben definiti hanno sfondo, contesto e il problema risolto dal motivo.

L'intero punto di un modello è quello di dirti quando è appropriato.

2

Non è consigliabile impostare sempre il software per adattarlo a uno schema di progettazione, ma se corrisponde a uno lo si utilizza. In molti casi la maggior parte delle cose che fai avrà un modello di progettazione che è semplicemente un modello che è stato osservato da molte diverse implementazioni software come comuni.

Ad esempio se si dispone di un set di classi che devono essere tutte sincronizzate. Bene, questo funziona bene con il pattern Observer o Publish/Subscribe dove una classe è il notificatore e l'altra ascolta le notifiche. Observer pattern

Oppure dire che si desidera limitare l'utilizzo della memoria in un motore di gioco, è possibile creare un ObjectPool. Object pool

O forse si vuole semplificare una serie di oggetti in un API simplr quindi utilizzare il modello Facade: Facade pattern

Molte volte solo con modelli funzionali come l'incapsulamento o eredità vanno bene. Dipende dal problema Nella maggior parte dei casi, gran parte di ciò che si tenta di codificare verrà risolto in uno schema, ma i pattern non sono l'unico modo per codificare. In molti casi, inizi a progettare o hai bisogno e diventa un modello.

Ricordare i pattern originati dall'osservazione di molti tipi di problemi software, non è il punto di partenza ma il riflesso dell'architettura software.

Design pattern (computer science)

Molti campioni di modelli a dofactory.com: Design pattern tutorial by dofactory

Python design pattern: http://video.google.com/videoplay?docid=-3035093035748181693

Forzatura design pattern è come costringere OO. Dovrebbe venire naturalmente dai bisogni nel progetto attuale.

0

Trovo che se sto solo hackerando un programma, un buon uso di schemi di progettazione è quasi impossibile, ma, se si progetta il programma, allora si può guardare a ciò che si vuole fare e i modelli di progettazione iniziano a essere visti in la tua applicazione.

Ad esempio, se si vede che esiste una classe che dirige il flusso dell'applicazione, allora il pattern Controller ha senso.

L'altro modo di utilizzare modelli di progettazione è scrivere il programma, farlo funzionare, quindi refactoring utilizzando modelli di progettazione. Credo che Martin Fowler abbia scritto un libro su questo argomento, ma non sono favorevole all'autore.

In entrambi i casi è utile sapere che cosa si desidera fare per aiutare a decidere quali modelli funzionano meglio.

+0

Sì, "Rifattorizzare: migliorare il design del codice esistente" di Fowler. È il miglior libro sull'argomento che ho incontrato. – CurtainDog

+0

L'ho cercato, il libro è "Refactoring to Patterns" http://www.industriallogic.com/xp/refactoring/ –