Nella progettazione di un'API che fornisce un'interfaccia per l'ascolto di eventi, sembra che ci siano due modi contrastanti di trattare le chiamate per aggiungere / rimuovere listener:
-
Più chiamate a addListener aggiungeranno un solo listener (come aggiungendolo a un set); può essere rimosso con una sola chiamata a removeListener.
-
Più chiamate a addListener aggiungeranno un listener ogni volta (come aggiungerlo a un elenco); deve essere bilanciato da più chiamate a removeListener.
Ho trovato un esempio di ciascuno: (1) - La chiamata addEventListener del DOM nei browser aggiunge solo gli ascoltatori una volta, silenziosamente ignorando le richieste di aggiungere lo stesso listener una seconda volta e (2) - jQuery .on
behavior aggiunge listener più volte .
La maggior parte delle altre API listener sembrano utilizzare (2), come i listener di eventi SWT e Swing. Se viene scelto (1), c'è anche la domanda se debba fallire in modo silenzioso o con un errore quando c'è una richiesta di aggiungere lo stesso listener due volte.
Nelle mie implementazioni, tendo ad attenermi a (2) poiché fornisce un'interfaccia di tipo clean setup / teardown e rivela bug in cui "setup" viene eseguito involontariamente due volte ed è coerente con la maggior parte delle implementazioni che ho visto.
Questo mi porta alla mia domanda - Esiste una particolare architettura o altra struttura di base che si presti meglio all'altra implementazione? (es: perché esiste l'altro modello?)