在学习Redux时,我想到了上帝对象模式(或反模式)-两者都有一个大对象,其中包含所有应用程序数据和操作它们的方法。但是Redux施加了一些约束,例如使Object不可变以及事件纯函数保持严格的签名。
因此,问题来了,Redux是否使用了经过清理的God对象版本?还是与Javascript不是经典的强类型OOP有关?
DbContext
)访问我的数据库,但其内部数据又细分为较小的部分(表,模式)。
在学习Redux时,我想到了上帝对象模式(或反模式)-两者都有一个大对象,其中包含所有应用程序数据和操作它们的方法。但是Redux施加了一些约束,例如使Object不可变以及事件纯函数保持严格的签名。
因此,问题来了,Redux是否使用了经过清理的God对象版本?还是与Javascript不是经典的强类型OOP有关?
DbContext
)访问我的数据库,但其内部数据又细分为较小的部分(表,模式)。
Answers:
什么是上帝的对象?从维基百科:
程序的全部[包含上帝的对象]的大部分功能都被编码为一个“全知”的对象,该对象保留了有关整个程序的大多数信息,还提供了用于处理此数据的大多数方法。由于该对象拥有大量数据并需要许多方法,因此它在程序中的作用类似于上帝(无所不知和无所不包)。
Redux存储仅包含一个数据对象,仅需要2或3个方法。在这方面,很难想象将其视为上帝的对象。绝对不是 “全知”。
现在,如果您的减速器根本没有分解,如果所有逻辑都在一个函数中,那么这可能符合条件,但是将减速器分解为一堆较小的块以避免这种情况很简单。
第一页清楚地表明Redux解决了特定于单页Web应用程序的问题:
随着对JavaScript单页应用程序的需求变得越来越复杂,我们的代码必须管理比以往更多的状态。(来自Redux-动机)
我自己的翻译是-Web应用程序和用于创建Web应用程序的框架是混乱的,当它们在浏览器中运行时,它们面临着一系列独特的问题,这些问题只是在Web应用程序之外不会出现的。
不要误会我的意思-我并不是说Web应用程序很糟糕,也不是框架很糟糕。只是毫无疑问,网页和整个范式从来没有考虑到应用程序的设计。一些网络应用程序的运行非常出色-例如,我喜欢Google Docs,它比同类本地应用程序要好。
但是Redux只是一种工具,用于管理当您不得不处理因创建在浏览器中运行的Web应用程序而引起的限制和问题时出现的问题。
对于iOS应用程序或任何本机应用程序,这没有任何意义。对象模型可轻松处理异步更改和用户交互。您将永远知道发生了什么。呈现不同的状态不是问题,并且可以通过MVC和更新事件自动执行。
您再也不会遇到像Web应用程序那样的情况。
**如果您的架构不好,那么,什么也救不了您,甚至Redux也没有;)