Плюсы / минусы объекта глобального наблюдателя или миксин - PullRequest
5 голосов
/ 22 декабря 2011

При создании сложного приложения JS, каковы плюсы и минусы использования глобального объекта-наблюдателя, который запускает события и на который подписываются все другие объекты, в сравнении с микшированием или прототипированием методов pub / sub для всех объектов, отвечающих за запуск свои события?

Возьмем, к примеру, карточную игру, в которой есть объекты дилера, игрока и таблицы (следует psuedocode-ish):

// "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);

против

// 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);

1 Ответ

0 голосов
/ 22 декабря 2011

В ваших примерах оба варианта кажутся правильными, но разницу можно увидеть при работе с динамическими именами событий (также с динамическими именами издателей).

Так что использование глобального эмиттера хорошо, когда вам нужно подписаться на события, используя подстановочный знак. Пример:

eventEmitter.subscribe('*:delt', handler);

Другое отличие состоит в том, что вы можете иметь одну переменную вместо 2,3 ... N, что, на мой взгляд, лучше для памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...