Durante la creazione di un'applicazione JS complessa, quali sono i pro e i contro dell'uso di un oggetto observer globale che genera eventi e che tutti gli altri oggetti sottoscrivono rispetto a mixing o prototyping metodi pub/sub su tutti gli oggetti che sono responsabili dell'attivazione dei propri eventi?Pro/contro di un oggetto osservatore globale rispetto a un mixin
Prendiamo ad esempio un gioco di carte che ha commerciante, oggetti giocatore, e da tavolo (psuedocodarlo-ish segue):
// "Global" observer version
var observer = {
// publish and subscribe methods defined here
};
dealer.deal = function(cards) {
// performs logic for dealing cards
observer.publish('dealer:dealt', cards, this);
};
player.play = function(cards) {
// performs logic for which card is played
observer.publish('player:played', cards, this);
};
table.showCards = function(cards, player) {
// performs logic for showing cards that the dealer dealt
// or that the player played
};
observer.subscribe('dealer:dealt', table.showCards);
observer.subscribe('player:played', table.showCards);
vs
// Pub/sub mixin/prototype version
dealer.deal = function(cards) {
// performs logic for dealing cards
this.publish('dealt', cards);
};
player.play = function(cards) {
// performs logic for which card is played
this.publish('played', cards);
};
table.showCards = function(cards) {
// performs logic for showing cards that the dealer dealt
// or that the player played
};
dealer.subscribe('dealt', table.showCards);
player.subscribe('played', table.showCards);
Da che parte siete finiti? Sono attualmente alle prese con la stessa decisione. E anche un anno dopo aver posto la domanda sembra che non ci siano dati chiari là fuori per aiutare a fare la scelta. I pool pari globali sembrano più liberi e meno dispendiosi di memoria, ma quando i sistemi iniziano a diventare veramente enormi mi chiedo se diventerà semplicemente troppo difficile da gestire. – nicholas