ReactJS应用程序的MVVM架构模式

时间:2018-07-24 19:45:05

标签: javascript reactjs mvvm redux redux-saga

我是reactJavaScript的半高级开发人员,我已经开发了多个通用react应用程序。

今天,我们的CTO告诉我:您是否为您的应用程序使用软件体系结构模式?

我没有答案,他指向Android团队,该团队使用MVVM进行应用。

我正在搜索贪婪,但没有找到这种情况的趋势方法或示例。我用过ReduxRedux-SagaReact-Context等。

我不知道如何向我们的首席技术官解释,或者他的回答是什么?

因此: react应用是否真的需要软件架构模式?

2 个答案:

答案 0 :(得分:14)

React本身对软件体系结构没有特别的看法。它是一个库,可促进可重用组件范例以及用于管理状态和数据共享(props)之类的准则。在某个时候,Facebook将其描述为the V in MVC,但此后便不再使用该营销手段,而是更抽象地称呼它为A JavaScript library for building user interfaces

当然,与React应用程序关联的典型工具确实可以在某种架构中使用。

几种可能的思考方式:

简单的React应用可能只是“ VVM”或“ VC”

在开发世界中,MVC可能是两者中比较知名的。控制器(C)和视图模型(VM)之间的关键概念差异可以归结为:控制器可以承担许多不同的职责,例如侦听事件并按正确的方向路由事件。胶水促进了整个应用程序的功能。另一方面,视图模型仅负责将数据的当前状态粘贴到模型中。

因此,Facebook最初在MVC中使用V可能与在MVVM中使用V一样容易-在后端开发世界中,控制器一词更有意义。

一个没有Redux的准系统React应用程序,它通过任何形式的有限数据处理将数据直接拉入组件(例如fetch中的componentDidMount或利用GraphQL)可以被称为简单的“ VVM” ”模型。

视图模型(VM):与组件相关的代码,用于管理简单状态,将数据直接传递到View上,并有可能将数据直接从View传递回

视图(V):视觉效果(JSX,CSS)

增加一些复杂性,您可以将其称为“ MVVM” /“ MVC”

如果您在Redux,redux-saga中折腾,或者甚至开始使用简单的React组件状态来做疯狂的事情,那么您将引入模型操作。此模型(M)至少可以表示两件事:

  1. 您的应用程序的实际业务逻辑
  2. 在客户端中存储和管理复杂行为

业务逻辑有时在实践中有时是不可取的:例如,如果您控制服务器,则可能需要将所有业务逻辑都放在一个位置(在服务器上),并仅向UI提供交互所需的内容。用户。但是,如果您的REST端点数量有限,并且需要进行一些调整(例如,在Sagas中或在组件内部),那将是业务逻辑。

客户端行为管理是可能的,尤其是在复杂的应用程序中,您可能会执行一些操作,例如根据用户的会话向用户显示不同的内容(例如,他们是未注册的用户,用户和管理员)。您可能正在包含仅供客户端使用的任何redux存储交互中执行此操作。


免责声明:讨论MVC,MVVM等可能导致对确切含义的许多不同观点[1]。上面,我试图在常见的模式与它们如何适用于MVC / MVVM之间进行比较,但是有很多不同的方法可以使用它,也可以使用更精细的方式来考虑。只要您的系统易于理解,我就不会在标签上贴上标签:模块化,DRY,抽象等,这些级别对您的用例和开发规模都有意义。

[1]在answers and comments to this question

中有更多讨论

答案 1 :(得分:-2)

一个简单的 Web App 不需要 MVC、MVVM,甚至不需要 React IMO。 一个简单的 ReactJS 应用程序的可能演变,如果它试图成为 PWA(渐进式 Web 应用程序),它可能会看到 MVVM/MVC/ 的需求。换句话说 - 如果它试图做一些(应用程序/域)特定的逻辑 - 离线和其他一些 - 在线。这是移动应用程序开发的自然思维点。然后,可以从本地存储或 IndexedDB(用于 Web)或后端/Rest/ 检索信息。然后,模型、存储/存储库/信息源/视图模型/或控制器/和视图的分离将是自然的,并且实际上需要所有东西才能正常工作......