Un evento che si alza da solo - è troppo complicato?

2

Ho un piccolo problema. Sto scrivendo un sistema di caricamento e caching delle risorse, in cui l'utente può richiedere una risorsa e impostare un callback da chiamare quando la risorsa viene caricata (e / o attendere che il carico finisca). Questo porta a codice come questo:

var waitobj=Loader.RequestObject("foo");
waitobj.LoadFinished+=delegate{ Bar(); };

Tuttavia, poiché le risorse sono memorizzate nella cache, la chiamata a RequestObject potrebbe effettivamente essere completata in modo sincrono. Ciò significa che quando viene impostata la richiamata, la richiesta è già terminata e la richiamata non viene mai chiamata. Ho pensato a un trucco intelligente: controlliamo semplicemente lo stato della richiesta nell'evento stesso dell'adder!

public event LoadFinishedHandler LoadFinished {
    add {
        if(Finished)
            value();
        else
            m_LoadFinished+=value;
    }
}

Questo chiamerà la funzione di callback non importa cosa .. ma i miei colleghi hanno detto che questo metodo è troppo complicato e nessuno sarà in grado di mantenere questo codice. Mi piace comunque questo trucco, ma ovviamente sono di parte.

Che cosa pensi, questo trucco è troppo intelligente per il suo bene?

    
posta Nevermind 06.04.2011 - 14:58
fonte

2 risposte

2

Posso vedere da dove arrivano i tuoi colleghi. Sembra un approccio pericoloso.

La maggior parte delle persone in questa situazione farebbe qualcosa del genere:

Loader.BeginRequestObject("foo", Bar);

BeginRequestObject avvia quindi un thread per fare qualunque cosa tu stia facendo in RequestObject e poi ritorna immediatamente. Al termine del thread, chiama Bar ().

Questo è molto più solido del modello di eventi per questo tipo di situazioni. Il modello di eventi è più utile nei casi in cui si dispone di un oggetto con molti listener (che possono connettersi prima dell'inizio del thread) che sono tutti interessati a sapere quando gli eventi si verificano durante il processo.

    
risposta data 06.04.2011 - 15:08
fonte
1

C'è un vecchio adagio:

"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." --Brian Kernighan

Cerca in che cosa ciò potrebbe significare per il tuo codice. ;)

    
risposta data 06.04.2011 - 15:16
fonte

Leggi altre domande sui tag