Domanda

Hai un osservabile / ascoltabile orientato al pull che avvisa gli osservatori / ascoltatori quando alcuni stati cambiano.

Lo stato è costituito da più di una serie di dati e alcuni osservatori / ascoltatori non si preoccupano dell'intero stato.

Preferisci in genere avvisare tutti gli osservatori / ascoltatori e consentire loro di ignorare le notifiche quando nulla di loro interessa?

O preferisci generalmente un osservabile separato per ogni "pepita" dei dati in modo che i tuoi osservatori / ascoltatori abbiano la garanzia di ricevere solo le notifiche a cui devono rispondere?

Dipende dalla situazione?

Hai qualche idea generale sulla granularità dei tuoi osservabili / ascoltabili?

È stato utile?

Soluzione

Stai scambiando i costi di manutenzione con i costi di consegna. Se hai definizioni di eventi ben definite, ogni osservatore ottiene solo esattamente ciò di cui ha bisogno, quindi non paghi le spese generali di consegna agli osservatori che non sono interessati - ma che risparmiano sui costi perché ogni nuovo tipo di pepita deve essere aggiunto al sistema in qualche modo.

Nei sistemi di messaggistica Pub / Sottotitoli in cui i costi di consegna sono relativamente elevati (messaggi che circolano sulle reti), in genere è necessario prestare molta attenzione all'argomento delle definizioni. Una gerarchia di argomenti attentamente progettata è spesso utile. Quindi otteniamo modelli come

  sport
       football
              england 
                    premier
                    champioship
              scotland
                    spl
              france
                    ...
       cricket
              australia
                    ...
              india
              sri lanka

Quindi consentendo abbonamenti a vari livelli. Puoi iscriverti a tutti gli sport o (come alcuni potrebbero) fino a

    sport/football/england/championship/watford

Altri suggerimenti

Come regola generale, le interfacce specializzate fanno più bene che male, quindi implementerei sicuramente più che meno.

Questo ovviamente chiama alla situazione però. Specializzati in questo modo solo se è necessario, e dalla tua situazione sembra così, altrimenti è come informare i produttori di cereali che il grano ha bisogno di essere raccolto. Semplicemente non si applica.

Se dovessi farlo, probabilmente creerei una classe Osservabile che avrebbe un evento per ogni tipo di pepita e un evento globale per ogni pepita. Un po 'come una via di mezzo.

Non è solo manutenzione. Più specifica è l'interfaccia tra osservabili e osservatori, più si accoppiano.

Il libro Gang Of Four ha una sezione per questo problema e sconsigliano sia i modelli push che pull. Il modello pull potrebbe essere inefficiente, il modello push potrebbe non essere abbastanza riutilizzabile.

Quindi, dipende molto dalla situazione. Tendo ad andare leggermente al di sopra del modello pull.

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