MVC与Flux?双向与单向?

Ari*_*deh 37 model-view-controller flux reactjs

查看下图(解释MVC),我看到了单向数据流.

那么为什么我们认为MVC具有双向数据流,同时证明Flux的合理性呢?

MVC模式

Aru*_*ula 30

Real和Pure MVC是单向的.从问题中粘贴的维基百科图中可以清楚地看出.

十多年前,当像Apache Struts这样的服务器端框架实现了一个名为Model View Presenter(MVP)模式的MVC变体时,他们使每个请求都通过控制器,每个响应都通过控制器返回.每个人都继续称它为MVC.由于Web的固有特性,如果没有发送请求或更新的视图,则无法将模型中的任何更改传播到视图.所以Pure MVC没有实现.而是实施MVP.

几年前,当像Angular,Ember,Knockout这样的框架在前端实现MVC时,他们实现了另一种名为Model View ViewModel(MVVM)模式的MVC变种,很少有人继续称之为MVC.(很少有人意识到术语并不重要,称之为MVW(W代表Whatever)),它们都没有实现纯粹的MVC.

当React诞生时,他们抓住机会实现纯MVC(不是MVP或MVVM),并将其重命名为Flux,几乎没有变化.我觉得Flux是MVC的另一个变种.虽然,Flux/React团队表示它不是MVC,但我看到两种体系结构之间存在很多奇偶性 - Flux和MVC.


chu*_*die 15

因为在Javascript框架中,MVC不会按照您描述的方式工作.UI通常与模型双向通信,如下所示:

  1. 用户键入View输入
  2. MVC框架绑定onchange()以更新模型.
  3. Ajax请求带来了新的模型数据.
  4. MVC框架更新查看输入的值以匹配模型.

在Flux体系结构中,UI只会向调度程序发出一个带有类型和相关数据的独立操作,然后调度程序将以与任何后台ajax方法更新模型相同的方式更新模型.

参考:http: //www.thesoftwaresimpleton.com/blog/2013/03/23/client-side-mvc/

"客户端MVC与Server Side MVC完全不同"

"我们正在建立两个物体之间的双向通信......"

"简而言之,我们将Person对象的firstName属性的值连接到输入的value属性."

http://guides.emberjs.com/v1.10.0/object-model/bindings/

Ember.js中的绑定可以与任何对象一起使用,而不仅仅是在视图和模型之间.


use*_*345 15

我是嵌入式开发人员,我在我的应用程序中使用MVC模式.我的应用程序非常小,我已经将我的架构设置为几乎单向的MVC.但是,我读了这篇文章,解释了客户端MVC,以及一些关于MVC和FLUX之间差异的想法.

参考:http: //www.christianalfoni.com/articles/2015_08_02_Why-we-are-doing-MVC-and-FLUX-wrong

传统的MVC

|------|  request   |------------|  request   |-------|
|      | ---------> |            | ---------> |       |
| VIEW |  response  |            |  response  |       |
|      | <--------- |            | <--------- |       |
|------|            |            |            |       |
                    | CONTROLLER |            | MODEL |
|------|  request   |            |  request   |       |
|      | ---------> |            | ---------> |       |
| VIEW |  response  |            |  response  |       |
|      | <--------- |            | <--------- |       |
|------|            |------------|            |-------|
Run Code Online (Sandbox Code Playgroud)

FLUX

 COMPONENTS          ACTION CREATORS           STORES

    |----------------------<<<<-------------------|
    |                                             |
|------|            |------------|            |-------|
|      |  request   |            |  request   |       |
| VIEW | ---------> |            | ---------> | MODEL |----
|      |            |            |            |       |   |
|------|            |            |            |-------|   |
                    | CONTROLLER |                        |
|------|            |            |            |-------|   |
|      |  request   |            |  request   |       |   |
| VIEW | ---------> |            | ---------> | MODEL |   |
|      |            |            |            |       |   |
|------|            |------------|            |-------|   |
   | |                                           |        |
   | |--------------------<<<<-------------------|        |
   |----------------------<<<<----------------------------|
Run Code Online (Sandbox Code Playgroud)

  • 用键盘输入这个型号难吗?或者你使用了发电机或工具? (4认同)
  • 您所谓的'传统MVC'是应用程序模型或MVP,'FLUX'是经典MVC https://www.martinfowler.com/eaaDev/uiArchs.html#ModelViewController (3认同)

Ala*_*eay 5

有些人采用术语 MVC 来指代 JavaScript 框架,其他人指出这些框架不是纯粹的 MVC,而是一种变体,可以称为MVP(Backbone)、MVVM(Angular 1)或更广泛的 MV*(另请参阅Arun 的回答))。

Facebook 引入 Flux 时,他们将其与 MVVM/MVP/MV* 的问题进行了比较,但混淆地使用了术语 MVC。

对于观看此视频的纯 MVC 开发人员来说,Facebook 声明的 MVC 问题没有意义,Facebook 对 Flux 的描述比他们描述的 MVVM 系统更接近 MVC:

核心问题是他们“做”MVC 是错误的。然后他们修复了它,但决定重新命名并说他们发明了解耦数据、视图和事件处理的模式

YouTube 评论

看起来您的程序员创建了通量,因为他们不知道如何正确使用 MVC 和事件调度程序。

YouTube 评论