我注意到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 */);
这个模式被称为什么,在一个访问器链中添加可能影响函数执行的标志,每个访问器返回目标函数(与任何其他可用/适当的可链接访问器)?什么时候适当结束,比如只是将一些参数传递给函数?
看着它让我想到为我的HTML5网络应用创建一个sync
对象,如下所示:
// 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;
};
答案 0 :(得分:2)
我将其称为流畅的界面的示例。
在软件工程中,一个流畅的界面(由Eric创造的第一个) Evans和Martin Fowler)是面向对象的实现 旨在提供更易读代码的API。流畅的界面是 通常使用方法链接来实现中继指令 后续电话的背景。
当然,在您的示例中,您拥有属性而不是方法。但是看一下socket.io-node代码,'属性'被编程为__defineGetter__
,所以你不妨说它们是方法。
关于HTML5的同步对象:在调用save之后考虑同步对象的状态。它是重置为原始状态还是记住配置?如果连续两次调用保存会怎么样?
如果它只是可读性,你也可以让调用者像这样传递配置:
sync.save(someObj, { toLocalStorage: true, toServer: true });