Event Handler e IObservable sono intercambiabili?

0

Ho un oggetto che periodicamente genera un evento in base a un'azione eseguita in un'applicazione. Questo sarà ascoltato da qualsiasi ascoltatore (i) e seguito di conseguenza.

Non desidero utilizzare un tipo personalizzato per questo e vorrei utilizzare o EventHandler<T> o IObservable<T> per gestire il meccanismo pub / sub che sto cercando di mettere in atto.

Ho avuto un gioco con entrambi e entrambi fanno ciò che richiedono.

Ho letto il pattern di progettazione di MSDN Observer e Guida alla programmazione degli eventi MSDN , tuttavia, rimango incerto sul fatto che un meccanismo sia più appropriato del altro.

È più adatto per il mio scenario rispetto all'altro o sono entrambi adatti e semplicemente per scelta personale?

Modifica 1

I miei requisiti per pub / sottotitoli non sono al livello dell'interfaccia utente a questo punto e sono più in basso. Il mio editore sta monitorando l'attività della rete e aumentando un evento in base a determinati eventi di rete. L'abbonato è responsabile dell'ascolto di eventi sollevati e dell'esecuzione di un'azione associata. L'interfaccia utente non è coinvolta a questo punto.

    
posta Unflux 13.09.2014 - 02:03
fonte

3 risposte

1

A quanto ho capito, lo schema Observable riguarda tradizionalmente il binding in tempo reale di un'interfaccia utente, in base alle modifiche nell'archivio dati sottostante. In altre parole, un'interfaccia utente che si iscrive a un IObservable<T> ha aggiornamenti che vengono trasferiti quando l'archivio dati sottostante cambia.

I gestori di eventi sono un meccanismo più generalizzato. Sono usati per tutti i tipi di cose, sia all'interno dell'interfaccia utente che altrove. Fondamentalmente, EventHandler<T> è in realtà solo una definizione formale per una firma delegata che è stata utilizzata sin dall'inizio di Windows Form.

    
risposta data 13.09.2014 - 03:29
fonte
2

Hai guardato Reactive Extensions? Reactive Extensions è una libreria che consente la composizione di codice aysynchronous e basato su eventi. Darei un'occhiata a Intro To Rx , ha molte informazioni su quando IObservable è appropriato e, come ha detto J Trana, uno dei vantaggi è una riduzione dell'accoppiamento.

Senza ulteriori informazioni sulla tua applicazione, è difficile consigliare specificamente quale approccio consiglierei.

    
risposta data 13.09.2014 - 12:44
fonte
0

Quando penso agli eventi, di solito penso a loro nel contesto di quanto siano strettamente accoppiati.

EventHandler style eventing è molto concreto e strettamente accoppiato. Ritengo che sia appropriato nello stesso tipo di situazioni che usereste una classe concreta contro un'interfaccia per qualcosa. È l'approccio "integrato" a .NET e ai mirror get / set sulle proprietà con add / remove. Assicurati di considerare il blocco all'interno del tuo Aggiungi / Rimuovi se segui questo percorso.

IObservable < T > gli eventi di stile sono meno concreti. Potresti avere uno o più oggetti che potrebbero essere passati in giro come lo stesso IObservable < T & gt ;. Fornisce inoltre un meccanismo di gestione degli errori e di completamento.

L'aggregazione di eventi è una terza opzione, una che io Ho usato e piaciuto. Fornisce un accoppiamento ancora più flessibile e aiuta gli abbonati e gli editori a ignorare i dettagli l'uno dell'altro. Semplifica anche gli eventi di distribuzione su diversi thread.

In generale, i meccanismi strettamente accoppiati sono semplici da scrivere e semplici da eseguire il debug, ma offrono meno flessibilità man mano che un'applicazione cresce. I meccanismi liberamente accoppiati sono ancora facili da scrivere, ma possono essere molto meno semplici da tracciare quando si guarda un codice base sconosciuto. In ogni caso, assicurati di comprendere anche la durata degli oggetti sottoscrittori quando implementi questi schemi (principalmente quelli strettamente accoppiati), poiché non lasciare cadere oggetti è una trappola. MSDN ha una piccola sezione sull'accoppiamento degli eventi.

Purtroppo, non vedo abbastanza descrizione del tuo programma per capire quale livello di accoppiamento hai bisogno, ma spero che questo ti aiuti a fare la scelta giusta.

    
risposta data 13.09.2014 - 03:29
fonte

Leggi altre domande sui tag