Я заметил следующий шаблон в socket.io-node :
// e.g. 1
socket.volatile.emit('bieber tweet', tweet);
// e.g. 2
socket.broadcast.json.send({ a: 'message' });
в более широком смысле это выглядит следующим образом:
someObject.functionFlagA.functionFlagB.functionFlagEtc.someFunction(/* etc */);
Как называется этот шаблон, когда вы добавляете флаги, которые могут повлиять на выполнение функции, в цепочку методов доступа, каждый из которых возвращает целевую функцию (с любыми другими доступными / подходящими цепочками доступа)?Когда это уместно, скажем, просто путем передачи некоторых параметров в функцию?
Глядя на это, я подумал о создании объекта sync
для моего веб-приложения HTML5 следующим образом:
// Saves someObj to localStorage AND to server-maintained session
sync.toLocalStorage.toServer.save(someObj);
... так как это было бы более самодокументируемым, чем:
// Saves someObj to localStorage AND to server-maintained session
sync.save(someObj, true, false, true);
Это правильное использование вышеуказанного шаблона?
РЕДАКТИРОВАТЬ 2011-12-06 13: 06: 15
Для любопытных, именно так socket.io реализует это:
Socket.prototype.__defineGetter__('volatile', function () {
this.flags.volatile = true;
return this;
});
, который используется в цепочке для окончательного вызова следующей внутренней функциикоторый отправляет пакет и очищает флаги:
Socket.prototype.packet = function (packet) {
/* snip */
this.setFlags(); // clears this.flags
return this;
};