C'è qualche ragione per scrivere delegati / eventi per una classe?

2

Ho un gioco con eventi come GameOver, GameStart, PlayerWin, ecc. Ho solo una classe che sta ascoltando su questi eventi, allo scopo di inviare questi eventi come messaggi json TCP a un client (giocatore).

Ma per ogni funzione di gioco importante che scrivo, devo scrivere un event e poi chiamare

if(MyEvent != null)
   MyEvent(this, new GameEventArgs("gameover"));

Potrei facilmente evitare di scrivere event per ogni azione importante e includere invece il listener come classe istanziata e semplicemente inviare messaggi in questo modo.

private GameListener gameListner = new GameListener();

private void GameOver(){
    this.turnTimer.enabled = false;
    this.winner = player; //etc
    gameListener.GameOver(player);
}

class GameListener{
    public void GameOver(Player player){
        JSON json = EncodeJson(GAME_OVER, player);
        SendClientData(json);
    }
}

C'è qualche ragione per cui dovrei attenermi agli eventi e ai delegati?

    
posta user2410532 03.08.2015 - 23:30
fonte

2 risposte

2

Il vantaggio degli eventi rispetto al tuo approccio è che più di uno o meno di un oggetto può ascoltare un evento. Nel tuo caso, ci potrebbe essere uno e un solo listener di giochi.

Puoi attaccare con YAGNI e KISS: in questo momento, hai solo un oggetto che ascolta l'evento, quindi perché preoccuparsi?

D'altra parte, usando gli eventi, specialmente se consideri EventHandler<TEventArgs> generico, è:

  • Molto facile da implementare,

  • Molto comune nel mondo C #, quindi gli altri programmatori probabilmente sapranno come usare il tuo codice,

  • Supporta da zero il caso in cui non è necessario ascoltare l'evento o quando esistono più listener (ad esempio, uno invierà un messaggio su TCP mentre altri archivieranno il nuovo punteggio dell'utente nel database.)

risposta data 04.08.2015 - 00:05
fonte
0

Il vantaggio principale dell'utilizzo di eventi / delegati è Loose Coupling .

Quando codifichi il listener nella classe event-publisher, accoppi strettamente entrambe le classi.

Inizialmente questo potrebbe non essere un aspetto negativo, ma se la tua applicazione deve crescere ed essere estesa, l'accoppiamento stretto può rendere difficile la manutenzione.

I delegati / eventi consentono all'editore dell'evento di essere completamente inconsapevole del / i consumatore / i di eventi.

Naturalmente, come MainMa ha già sottolineato, se le tue attuali esigenze sono semplici, è perfettamente ragionevole applicare KISS e YAGNI e rimandare il passaggio a eventi / delegati finché non sono necessari.

    
risposta data 04.08.2015 - 01:14
fonte

Leggi altre domande sui tag