【问题标题】:Redux and Design PatternsRedux 和设计模式
【发布时间】:2017-02-21 17:36:57
【问题描述】:

我已经使用 Redux 几个月了,对单向数据流有很好的感觉。但是,我没有接受过 OOP 和设计模式方面的培训。在听了talk by Ralph E Johnson 之后,我的第一反应是 Observable Pattern 与 Redux/Flux 流非常相似,对吗?这个类比在哪里失效?

他谈到了实现可观察模式所需的接口 - 这是 Redux/Flux 架构的作者在设计这些库/架构时所考虑的那种想法?

【问题讨论】:

  • 对我来说更像是命令或发布订阅。动作(命令)被调度并由减速器处理。 Reducers 不会“订阅”事件——它们会获取所有事件,并且必须决定处理哪些事件。

标签: design-patterns redux


【解决方案1】:

是的,Redux 存储本身是一个简单的 observable/pub-sub 实现,只有一个“更改/更新”事件发射器。 action 和 reducer 的使用与 CQRS 和事件溯源也有一些相似之处。见https://redux.js.org/introduction/motivationhttps://redux.js.org/introduction/prior-art

【讨论】:

    【解决方案2】:

    在 Redux 中,状态树使用单例模式,连接方法使用观察者模式。

    取自 Andra Joy Lally 的 An Obsession with Design Patterns: Redux

    【讨论】:

      【解决方案3】:

      Redux 是 Fl​​ux 模式的一种实现。 Facebook 提出了 Flux 模式,因为 MVC 对他们来说不是很好。 :) 见链接

      https://facebook.github.io/flux/docs/in-depth-overview/#:~:text=Flux%20is%20the%20application%20architecture,a%20lot%20of%20new%20code

      【讨论】:

        【解决方案4】:

        对我来说,Redux 是 MVC 模式的响应式实现。因为这里我们有带状态的模型(存储),用观察者模式监听状态变化,使用控制器调用模型的方法(发送动作)。但是改变状态的过程有点不同——通过使用 Reducers。但是方法是一样的:发送命令 -> 改变状态 -> 监听状态改变。

        《面向模式的软件架构》一书中对 MVC 模式有很好的解释。 这是本书中的scheme MVC 是如何工作的。

        【讨论】:

        • Konstantinos 指出 Facebook 创建 Flux 模式是因为 MVC 不适合他们。然后创建了 Redux,它基于 FluxCQRSEvent Sourcing 的组合。所以 Redux 中使用的模式是完全不同的。一个例子可能是 - MVC 可以有许多 Modal,而 Redux 有一个单一的存储,它是单一的事实来源。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-27
        • 1970-01-01
        • 1970-01-01
        • 2011-04-11
        • 1970-01-01
        • 2013-07-12
        • 1970-01-01
        相关资源
        最近更新 更多