Architettura di un event system basata sui template

di il
2 risposte

Architettura di un event system basata sui template

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

  • Re: Architettura di un event system basata sui template

    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"
  • Re: Architettura di un event system basata sui template

    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