Architettura di un event system basata sui template

di Anonimizzato13722 il
2 risposte
Salve a tutti,

Ho bisogno di un consiglio.
Sto tentando di sviluppare un event system i cui prerequisiti fondamentali sono:
  • Permettere la creazione di eventi personalizzati (che possano trasportare un informazione personalizzata)
  • Permettere di effettuare il binding di funzioni all'evento a runtime
Premettendo che non amo i template a causa degli errori osceni che ne possono uscire se vengono usati male e che quindi li uso il meno possibile ho pensato a questo sistema:

Scrivere una classe EvtGen (sta per Event Generator) templatizzata:

template<class EVT>
class EvtGen {
private:
    std::vector<std::function<void (EVT &evt)>> subscribers;
public:
    void emit(EVT &e) {
        for (auto f : subscribers)
            f(e);
     }
     
     // aggiunta delle funzioni per il bind, unbind e per il check del bind
A questo punto una classe che deve poter generare più eventi può essere scritta così:

class MoreEvents : public EvtGen<Evt1>, public EvtGen<Evt2> {
	void methodThatEmitEvt1() {
		// inizializzaizione di un oggetto Evt1 chiamato e
		emit(e);
	}
	void methodThatEmitEvt2() {
		// inizializzaizione di un oggetto Evt2 chiamato e
		emit(e);
	}
}

Purtroppo nella mia esperienza non ho mai scritto un sistema del genere e non riesco a valutarne bene i pro ed i contro.
O meglio i pro sono abbastanza semplici:
  • Qualsiasi oggetto può essere un evento (potrebbe essere anche un contro)
  • Creare dei nuovi eventi è immediato e semplice tanto quanto emetterli
  • La comunicazione tra gli event handler è garantita tramite l'uso dell'evento stesso che viene passato come reference
Qualcuno di voi riesce a vedere i contro che a me mancano?
Per esempio è ovvio che un oggetto che voglia emettere 10 o 15 eventi differenti avrebbe un albero di ereditarietà lunghissimo e questo aumenterebbe i tempi di compilazione.

2 Risposte

  • Il template sono la perfetta cartina al tornasole per separare la farina dalla crusca

    1) per sapere come funziona un sistema ad eventi devi, al minimo, leggerti "Enterprise Design Patterns"
    2) i template servono PROPRIO per ovviare all'albero di ereditarieta'
    3) per usare bene i template, uno dovrebbe studiare "C++ Templates: The Complete Guide"
  • migliorabile ha scritto:


    [...]
    2) i template servono PROPRIO per ovviare all'albero di ereditarieta'
    [...]
    Non ho capito se è positivo: nel senso che li sto usando proprio per quello per cui sono stati creati, o negativo perché li sto usando al contrario.

    migliorabile ha scritto:


    [...]
    3) per usare bene i template, uno dovrebbe studiare "C++ Templates: The Complete Guide"
    Lo sto già leggendo, purtroppo è un libro molto molto lungo e quindi non posso permettermi di leggerlo tutto prima di sviluppare il progetto.

    migliorabile ha scritto:


    1) per sapere come funziona un sistema ad eventi devi, al minimo, leggerti "Enterprise Design Patterns"
    Digitando su google "Enterprise Design Pattern" trovo solo il libro "enterprise integration pattern".
    Intendi questo o un design pattern che non ho ancora trovato?
Devi accedere o registrarti per scrivere nel forum
2 risposte