Programming

私有方法

采用在方法调用内每次新建函数的方式,可以实现绝对的私有方法:

  1. validate = async (...) => {
  2. const start = () => {
  3. ...
  4. }
  5. const end = () => {
  6. ...
  7. }
  8. start()
  9. ...
  10. end()
  11. return results
  12. }

观察者 / 发布订阅 -> 响应式

发布订阅,是 Subscribable 与 中间人/调度器(scheduler) 和 subscribers 三个角色间的直接关系。
观察者,则是 observable 与 observer 之间两个角色的关系。
观察者和被观察者,是松耦合的关系;发布者和订阅者,则完全不存在耦合。
所以 js 中通常用 proxy 实现观察者。proxy 后对象为 observable,observer 则响应其变化后做出行为。
但如果有需要进行 batch 类收集,也就是一段时间内的批量响应 后 统一触发,相当于添加了一个 中间人。这样 observer 的行为,是完全受 中间人 触发的,所以理论上应该更偏向 发布订阅。这两个概念是很模糊的,实现的过程中很容易相互转化的。
所以,这类模式因为很难区分,区分也意义不大。
甚至可以说,发布订阅是一种消息通信的模式,观察者模式的 observable 和 observer 通信交互的模式是发布订阅。
image.png
对于类似,某个内容变化,另一个内容反应的场景,可以统称,响应式Reactive。
响应式通常与异步处理相关,以及会引入数据流Stream的概念。响应式分离了事件发生(Action),与事件效果/回调(Effect)。
所以光讨论 发布订阅,观察者,是有严格的区分关系的,但是落到实际的方案实现上,很难区分是处于某种模式。但都是为了实现一个效果,某些内容变化,另一些内容响应变化。