Buone pratiche che utilizzano segnali e sistemi guidati da eventi

0

Sto utilizzando segnali (in particolare Boost signals2 ) per creare un API e un modello di protocollo basati su eventi.

La maggior parte degli elementi ha i propri segnali e di solito ci sono multipli di ogni elemento.

Considera un'entità di base, una user ; tra gli altri, l'utente può lasciare il sistema, quindi ho bisogno di avere un segnale di congedo.

La domanda è: l'oggetto dell'utente deve essere passato al gestore del segnale? Cioè:.

class user {
    signals<void(user&)> on_leave;
    //...
};

Se ci fosse std::bind e lambda allora questa decisione sarebbe più facile da fare, ma con quelli che passano l'utente potrebbe sembrare ridondante, cioè:

user.connect_on_leave(
    [](user& u) {
        //well I could already refer to user if I wanted to
    }
);

E lo stesso con l'associazione, potrei fare qualcosa di simile

user.connect_on_leave(std::bind(my_hander, std::ref(usr));

Inoltre, in generale, è meglio per ogni segnale passare semplicemente all'utente qualunque sia il suo interesse o avere una sorta di tipo message con cui operano tutti i segnali?

E la mia ultima domanda: a che punto dovrei smettere di normalizzare i dati? Se più segnali condividono lo stesso "payload", è meglio avere segnali separati come,

on_change_name(str)
on_msg_sent(str)
on_leave(str)

o

on_action(action, str)
    
posta 111111 21.01.2014 - 20:14
fonte

1 risposta

2

Quando si inviano messaggi / eventi in un sistema, è necessario utilizzare messaggi di dati specializzati per il carico utile.
In caso contrario, se ad esempio la tua classe utente cambia, tutto ciò che ascolta i messaggi che hanno un utente come carico utile, potrebbe essere influenzato anche da quella modifica.
Per quanto riguarda la tua domanda sulla normalizzazione: non è perché i segnali condividono lo stesso carico utile ora, che lo faranno sempre in futuro. Riutilizzare i messaggi (o le parti dei messaggi) introduce una forma di accoppiamento che potrebbe ostacolarti in un secondo momento quando gli eventi devono evolversi separatamente l'uno dall'altro.

    
risposta data 22.01.2014 - 11:09
fonte

Leggi altre domande sui tag