Flux Architecture 比 MVC 好在哪里

How is Flux Architecture better than MVC

我试图了解通量架构解决的真正问题是什么。

第一个也是主要的问题

但是在很多博客文章中,他们都在谈论 MVC/双向数据绑定。 我认为这是错误的,因为我看不到通量架构如何关心双向数据绑定。 例如:

angularJs登录申请:

<div ng-controller="loginCtrl">
  username<input ng-model="username">
  password<input ng-model="password">
  <button ng-click="submit()">Send</button>
</div>

脚本:

angular.module('app',[]).controller('loginCtrl', function($scioe) {
  $scope.submit = function() {
    globalStore.dispatch({
      action: 'LOGIN', 
      payload: {
        username: $scope.username,
        password: $scope.password
      }
    })
  }
})

当然我不会在实际应用程序中这样做,但在这个例子中我可以使用两种方式的数据绑定和存储。 在这种情况下 FLUX VS MVC,解释是一个更改可以循环并在整个代码库中产生级联效应(使调试和理解变得非常复杂)。

FLUX VS MVC 在这种情况下,他们说 flux 是 flux

的良好实现

所以我尝试阅读 flux official site 上的通量架构,他们分享了一个 youtube 视频并解释了 MVC 变得复杂,并且可以无限循环。

我的问题:

  1. 通量架构解决了哪些问题?
  2. 什么是 MVC 的真实示例 or/and 双向绑定问题。

Facebook 创建了 Flux 模式来巩固许多 React 组件之间的状态管理。使用 React,每个组件都能够维护它自己的状态。正因为如此,我们需要小心我们如何为我们的组件布局我们的架构。通常来说,我们试图将开发视为一个大型组件,其中包含许多较小的组件……大部分状态管理由最外层组件维护。这适用于很多事情,但不是所有事情。

所以 Flux 的发明是为了补充 React 的单向数据流,以帮助创建一个更容易推理 React 组件之间的状态系统。 Redux 是 Fl​​ux 的类似实现,但它更容易推理,因为 Redux 只有一个状态存储,所有组件共享。

总结 Flux 和 Redux 试图解决的整个问题,我们必须考虑一个孤立组件能够与另一个组件有效通信的替代方案。 React 有父子组件的单向流,但是当我们必须在它之外进行通信时会发生什么?这就是在组件外部拥有状态存储很有意义的地方。相反的是在组件之间设置手动事件和事件侦听器,这会很快变得混乱。

我认为你必须更多地考虑 MVC 与 CBA(基于组件的架构)而不是 Redux 与 MVC。

Redux 可以帮助您同步组件之间的状态,当您获得共享状态的复杂组件树时,Redux 会真正发挥作用。

我想向您介绍这个出色的演示文稿,它可以帮助您了解在基于组件的架构中使用 Redux 的好处。

管理州 Angular 2 - 圣路易斯 Angular 午餐 - Kyle Cordes https://youtu.be/eBLTz8QRg4Q

Facebook explains MVC 很快变得复杂**,并且很难让新开发人员入职。

"The biggest difference between Flux and MVC is that you avoid cascading updates" - video source at relevant time

所以他们改用 Flux,在风格上比 OOP 更像 FP。

但 Flux 实际上只是在客户端正确实现的 MVC(考虑到用户操作也必须通过控制器,而不仅仅是服务器交互)。

See the diagram here.

Store = Model

Dispatcher = Controller

View = View

View 只能与 Dispatcher/Controller 对话,而不是直接与 Store/Model 对话(与他们在错误的 MVC 实现中所拥有的相反;它基于可观察对象, as heard here).

与普通 MVC 的主要区别在于 Dispatcher 确保:

"Until your Store layer is completely done, the views or anything else can't put an action through the system." - video source at relevant time.

** - 我只能猜测这是因为“上帝对象”或“胖模型”,以及由于(糟糕的)OOP 而增加的耦合。