【问题标题】:Is Redux asking us not to use OOP?Redux 是否要求我们不要使用 OOP?
【发布时间】:2017-02-15 07:14:47
【问题描述】:

我有 OOP 背景,正在学习 Redux。似乎我对 Redux 了解得越多,我就越意识到它与 OOP 范式的对比是如何通过使用更多的函数构造来实现的。

也就是说,我从未使用过 Backbone,但我在 redux 文档中遇到了关于从 Backbone 模型迁移的内容:

Backbone 的模型层与 Redux 有很大不同,因此我们不建议将它们混合使用。如果可能,最好从头开始重写应用的模型层,而不是将 Backbone 连接到 Redux...

来源: https://github.com/reactjs/redux/blob/master/docs/recipes/MigratingToRedux.md#from-backbone

此外,我发现最初,它只是这样写:

抱歉,您需要重写模型层。 太不一样了!

来源:https://github.com/reactjs/redux/commit/fbe0852a25d4bf9819adfe95fef6aa6702658c07#diff-a7be1d864910aa327225143859006953R30

Sooo...Dan 是不是说要重写你的模型层,因为模型(例如来自 Backbone 的模型)本质上是面向对象的,而 redux 规定了一个更具功能性的范例?

【问题讨论】:

  • 不是redux不是OO,而是Backbone的模型和Redux使用了完全不同的模式,看起来不兼容(但我不能确定,因为我没用过redux)
  • 我不明白你是如何得出这个结论的。没有附加到“对象”的方法,它们就像 hasmaps 一样使用,我看不出它是如何限定的。

标签: oop backbone.js redux


【解决方案1】:

是的,不是的。您需要将数据内容重写为不是模型,而是该州的 POJO。它们看起来很像模型,它们绝对是对象,但它们不能有方法。好吧,从技术上讲,它们可以,甚至可能不是问题,但不鼓励这样做,因为状态应该是可序列化的。

因为我更喜欢设置属性和调用方法而不是调度动作,而且因为我喜欢将我的代码附加到我的数据中,所以我wrote a library 让您可以使用模型而不是标准的 Redux 动作创建者/动作/调度/reducer 范式。在底层,它是 100% Redux,但 Dev API 都是 OOP。这样它就拥有了 Redux 的所有优点和 OOP 的所有优点。您可能会发现它减轻了您所表达的一些担忧。

但是你仍然需要重写你的模型层。

【讨论】:

  • 谢谢。听起来您是在说 Flux/Redux 模式最适合贫血领域模型。准确吗?
  • 我会说是的。我不确定这个术语是否真的适用,我不能说我非常熟悉它。但是 Redux 是基于函数式编程风格的。据我了解,ADM 适用于 oo 环境以添加事务性。 Redux 是事务性的,因为动作要么完成,要么没有效果,但更重要的是它基于功能性。
  • 我刚找到这个,也很中肯:stackoverflow.com/a/32922984/6439734
猜你喜欢
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 2017-10-26
  • 2023-03-05
  • 1970-01-01
  • 2021-02-22
  • 2013-01-02
  • 2019-09-09
相关资源
最近更新 更多