Quando utilizzo un componente basato su eventi, sento spesso dolore durante la fase di mantenimento.
Dal momento che il codice eseguito è tutto suddiviso, può essere abbastanza difficile capire quale sarà tutta la parte di codice che sarà coinvolta in fase di esecuzione.
Questo può portare a problemi sottili e difficili da eseguire il debug quando qualcuno aggiunge alcuni nuovi gestori di eventi.
Modifica dai commenti: anche con alcune buone pratiche a bordo, come avere un bus di eventi a livello di applicazione e gestori che delegano affari ad altre parti dell'app, c'è un momento in cui il codice inizia a diventare difficile da leggere perché c'è un sacco di gestori registrati da molti luoghi diversi (specialmente vero quando c'è un autobus).
Quindi il diagramma di sequenza inizia a guardare complesso, il tempo impiegato per capire cosa sta accadendo sta aumentando e la sessione di debug diventa disordinata (breakpoint sul gestore dei gestori mentre itera su gestori, particolarmente gioioso con il gestore asincrono e alcuni filtri sopra di esso).
//////////////
Esempio
Ho un servizio che sta recuperando alcuni dati sul server. Sul client abbiamo un componente di base che chiama questo servizio utilizzando un callback. Per fornire un punto di estensione agli utenti del componente ed evitare l'accoppiamento tra componenti diversi, stiamo generando alcuni eventi: uno prima dell'invio della query, uno quando la risposta ritorna e un altro in caso di errore. Abbiamo un set base di gestori preregistrati che forniscono il comportamento predefinito del componente.
Ora gli utenti del componente (e anche noi siamo utenti del componente) possono aggiungere alcuni gestori per apportare alcune modifiche al comportamento (modificare la query, i registri, l'analisi dei dati, il filtro dei dati, il massaggio dei dati, l'animazione fantasia dell'interfaccia utente, la catena di query sequenziali multiple , qualunque cosa). Quindi alcuni gestori devono essere eseguiti prima / dopo altri e sono registrati da molti punti di ingresso diversi nell'applicazione.
Dopo un po ', può succedere che una dozzina o più di gestori siano registrati e lavorare con questo può essere noioso e pericoloso.
Questo progetto è emerso perché l'utilizzo dell'ereditarietà stava iniziando a diventare un casino completo. Il sistema di eventi viene utilizzato in una sorta di composizione in cui non sai ancora quali saranno i tuoi compositi.
Fine dell'esempio
//////////////
Quindi mi chiedo come le altre persone stanno affrontando questo tipo di codice. Sia durante la scrittura che la lettura.
Hai qualche metodo o strumento che ti permetta di scrivere e mantenere tale codice senza troppa sofferenza?