Podczas tworzenia złożonej aplikacji JS, jakie są plusy i minusy korzystania z globalnego obiektu obserwatora, który uruchamia zdarzenia i który wszystkie inne obiekty subskrybują w porównaniu do mieszania lub prototypowania metody pub/sub na wszystkich obiektach odpowiedzialnych za wywoływanie własnych zdarzeń?Zalety/wady obiektu obserwatora globalnego vs. mieszanka
Weźmy na przykład gra w karty, która ma kupca, obiektów gracz i tabeli (psuedocode-owski następująco):
// "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);
Którą drogą skończyłeś? Obecnie zmagam się z tą samą decyzją. Nawet rok po postawieniu pytania wydaje się, że nie ma jasnych danych, które mogłyby pomóc w wyborze. Globalne puli nawet wydaje się bardziej wolne i mniej intensywne pamięci, ale gdy systemy zaczynają być naprawdę ogromne, zastanawiam się, czy staną się po prostu skomplikowane. – nicholas