让我们想象一下,在面向对象的世界中,我想构建一个 Torrent
对象来监听网络并让我与其交互。它将继承一个 EventEmitter 并且看起来像这样:
var torrent = new Torrent(opts)
torrent.on('ready', cb) // add torrent to the UI
torrent.on('metadata', cb) // update data in the UI
我还可以让它做一些事情:
torrent.stop()
torrent.resume()
当然,如果我想从内存中删除 torrent,我可以调用 torrent.destroy()
。
这种 OO 方法的一个很酷的事情是,我可以轻松地将这个功能打包到自己的 npm 模块中,进行测试,并为用户提供一个漂亮、干净、可重用的 API。
我的问题是,如何使用 Cycle.js 应用程序实现这一目标?
如果我创建一个驱动程序,不清楚我将如何创建许多种子并拥有自己的独立监听器。另请考虑,我希望以一种其他人可以在其他 Cycle.js 应用程序中轻松重用的方式打包功能。
最佳答案
在我看来,您正在尝试解决一个问题,就像您会写的那样思考 "imperative code" 。 我认为使用自己的监听器创建 Torrent 实例不应该在循环组件中使用。
我会以不同的方式处理它 - 创建 Torrent 模块并弄清楚它的源和接收器是什么。如果该模块应该是可重用和发布的,您可以将其创建为一个函数,该函数将接收流作为参数。也许类似于TodoMVC Task component (然后在其父组件中使用)。
由于该模块可以作为纯函数创建,因此测试它至少应该同样容易。
这种实现当然取决于您的要求,但与模块的通信将仅通过流完成,并且由于它是声明性的,因此不需要您从其他地方调用的诸如 stop() 和 destroy() 之类的方法.
关于javascript - 创建 Cycle.js 可重用模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39139104/