Il bus degli eventi non influisce sullo stato globale?

1

"Minimizza lo stato globale mutabile" è un principio di progettazione del programma più o meno accettato. Il motivo spesso citato è che avere uno stato globale può influenzare due componenti che non sono apparentemente non correlati. In altre parole, uno stato globale mutante di un componente non avrebbe idea di chi altro sta effettuando poiché non sa quale altro componente ha una dipendenza da quello stato globale.

In modo tangenziale, un modello che è spesso consigliato per la creazione di software disaccoppiato è il modello del bus eventi in cui un componente in grado di generare eventi lo trasmette su un bus e i componenti interessati a determinati eventi si iscrivono sullo stesso bus per ricevere tali eventi. p>

La mia domanda è - l'argomento che vale per lo stato globale vale anche per il caso del bus degli eventi? Dopotutto, durante la trasmissione di un evento, non ho idea di chi altro stia rompendo poiché non ho modo di sapere quali altri componenti lo stanno ascoltando. Inoltre, proprio come nel caso dello stato globale, la lettura del codice potrebbe non rendere anche le dipendenze dei componenti su una certa anche nel sito di trasmissione.

L'unica differenza tra i due che posso pensare è che un evento è uno stato transitorio rispetto a uno stato globale sotto forma di variabili statiche o oggetti condivisi, che potrebbero essere persistenti.

    
posta curioustechizen 13.08.2014 - 13:09
fonte

1 risposta

7

Sì, è uno stato globale, ma è stato globale controllato in modo appropriato. Con il bus eventi, un determinato ricevitore di solito può registrarsi solo per gli eventi che vuole vedere, e un determinato mittente invierà solo una selezione molto piccola dei possibili eventi. L'ordinamento della gestione degli eventi è spesso in qualche modo definito dal bus eventi (a differenza di chiunque stia inviando un voto a livello globale). In un event bus, l'unico modo in cui le cose cambiano è che tutti vengano NOTIFICATI che hanno cambiato.

Il tuo problema è che stai prendendo l'idea "stato globale == cattivo" troppo letteralmente. Lo stato globale Unmanaged non è corretto. Lo stato globale che può cambiare senza preavviso è sbagliato. Lo stato globale ben controllato e correttamente isolato ti consente di completare il lavoro.

    
risposta data 13.08.2014 - 14:17
fonte

Leggi altre domande sui tag