Tylor:通常在许多事上我都坚持务实的态度,但我觉得响应式技术可以并应该用到每个地方。当你在编写应用程序的时候,可以编写零散的应用程序片段,它们是分成一块一块的,自己管理自己的行为。被动式编程与之相反,它提倡通过方法编程,如Foo.setBar(x),这种方式是在Foo的外部定义Foo和外部(译者注:这里指的x)的依赖的。当使用响应式编程的时候,Foo将会监听外部并自己决定什么时候更新bar。你能在找到一个关于它的精妙讨论,它对响应式重要的原因解释得更好。
Brian H:我认为图形化用户界面是最容易理解的响应式编程应用。用户界面需要具有对现实生活的示能性(affordance),否则它就没有任何意义。当用户点击某个东西的时候,你真的应该有所响应。但是同时,事件也从服务器过来。你也需要响应这些事件!事件流的统一使响应式编程对这些应用相当有吸引力。也就是说,每一个系统都有需要响应的刺激物。响应式技术通常总会派上用场的,即使手上的系统并不完全是用这种风格编写的。
Brian C:我认为开发人员应该优先选择响应式技术实现的功能至少有几个大类:异步数据流和随事件实时变化的值。两种情况下,能够管理和协调许多时时发生的事情是非常关键的,这正是响应式技术的强项。
一个用户界面程序需要响应用户的输入事件,并且同时处理发送数据和事件到服务器和从服务器接收数据和事件。用户输入可能促使需要发送和接收数据,这些数据也引起用户界面的改变,当用户决定下一步怎么做后,这反过来可能引起新的输入事件。响应式技术给了开发人员一套工具,甚至DSL。DSL能清晰地用极有表现力的代码为所有这些东西建模。
从服务器端的角度考虑同样的问题相当有趣。服务器可能接收到通过HTTP或者webSocket传过来的数据请求或者数据更新请求,反过来需要访问数据库和其他服务。服务器可能通过消息队列和其他服务交换事件。同样的,事件流以及及时响应事件并维护当前状态的最新视图是核心,响应式技术让建模变得简单多了,更容易做对。
我认为值得注意的是,除了代码风格、库、DSL等等,“响应式”代表了一种思考问题和解决方案的方式。正因如此,它不是免费的。要做到“响应式编程”或者应用响应式技术需要转变思维以及设计软件系统的方式。这需要时间,并且每个人都不一样。对我来说,这些时间相当值得花。
来源: http://www.infoq.com/cn/articles/virtual-panel-reactive-javascript-and-elm-in-2016