Domanda

Dopo aver letto il Primo Capo di Design Pattern libro e utilizza un certo numero di altri modelli di progettazione, sto cercando di capire il pattern Observer.Non è questo già implementato tramite Eventi .NET Framework?

È stato utile?

Soluzione

Sì, è possibile.Il pattern observer è chiamato anche il modello di pubblicazione/sottoscrizione, che è esattamente ciò che gli eventi consentono di fare.

Altri suggerimenti

Direi di sì, è stato Anders Heljsberg intento di rendere il pattern observer un linguaggio di prima categoria con funzione di eventi in C#, basato sulla sua esperienza con Delphi.Anders fa di questo e di altri intenzioni chiare in ottima intervista Ingegneria Del Software Radio.

Sì, è identico.

Una nota:se si vuole veramente comprendere gli eventi, io consiglio di imparare il pattern observer e l'attuazione di te un per un po'.Una volta che si comprendere appieno, smettere di farlo per voi stessi e per uso professionale e ben documentato attuazione a meno che non hai una reale necessità di fare altrimenti.

Che è di destra, gli eventi sono un'implementazione del pattern observer.Ho letto le discussioni , anche se, di persone che ancora scrivere loro, per dare loro una maggiore flessibilità, o forse solo per evitare l'evento di sensibilizzazione sintassi.

Sì, ma la programmazione del pattern observer in modo esplicito e quindi non utilizzando i delegati e gli eventi possono causare facilitare il debug del codice.

Considerare la differenza:

public void NotifyObservers()
{
    foreach(Product product in ProductList)
    {
        if (product is IProductObserver)
        {
               product.Update(this)
        }
    }
}

Qui è molto chiaro quali sono i prodotti in elenco ricevere la notifica di un cambiamento.Durante il debug è possibile ispezionare il ProductList...

Con l'utilizzo di delegati e di eventi si può essere più ingombrante, per scoprire quanti "delegati" erano in realtà "sottoscritto" per gestire l'evento.

La maggior parte delle lingue moderne hanno il supporto nativo per alcuni dei design pattern.Si è sostenuto che le lingue sono meglio i modelli più supportano in modo nativo, senza la necessità di attuare in modo esplicito, e che il Lisp è eccellente in questo senso.Jeff aveva qualcosa da dire su questo, troppo.

Microsoft Si Afferma che l'utilizzo di eventi e delegati è il c# per applicare il Pattern Observer.L'utilizzo di alcune fondamentali convenzioni di denominazione per eventi e delegati hanno chiamato il loro proprio modello come "Modello A Eventi" che fa esattamente la stessa cosa di fornire alcuni vantaggi aggiuntivi oltre il classico Pattern Observer.

"Modello A Eventi" è descritto in MSDN Library all'interno del "Esplorare il Design Pattern Observer"Articolo.

Riferimento Articolo di MSDN

Basato su eventi e delegati, la FCL utilizza il pattern Observer abbastanza ampiamente.I progettisti di FCL realizza pienamente il potere intrinseco di questo modello, da applicare per l'interfaccia utente e non UI caratteristiche specifiche di tutto il Quadro.Questo, tuttavia, è una leggera variazione su base pattern Observer, che il Quadro team ha definito il Modello a Eventi.In generale, questo modello è espresso formali convenzioni di denominazione per i delegati, eventi, e dei relativi metodi coinvolti nell'evento, processo di notifica.Microsoft raccomanda che tutte le applicazioni e i quadri che utilizzano gli eventi e delegati adottare questo modello, anche se non è l'applicazione in CLR o standard del compilatore

In base a questo esame del pattern Observer, dovrebbe essere evidente che questo pattern fornisce un meccanismo ideale per garantire croccante confini tra gli oggetti in un'applicazione, a prescindere dalla loro funzione (UI o altro).Anche se abbastanza semplice da implementare tramite callback (utilizzando il IObserver e IObservable interfacce), CLR concetti di delegati e gli eventi di gestire la maggior parte del "lavoro pesante", come pure diminuire il livello di accoppiamento tra il soggetto e l'osservatore.

No, riescono a raggiungere lo stesso intento, tuttavia essi sono diversi.Direi che il pattern Observer è piuttosto un hack di oltre il disegno per realizzare qualcosa che si potrebbe avere facilmente raggiunti con la programmazione funzionale, e che .Eventi NET utilizza la programmazione funzionale per raggiungere lo stesso obiettivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top