Facebook:MVC不适合大规模应用,改用Flux

尼克徐 发布于 2014年05月20日 | 更新于 2014年05月26日
tinyfool 等1人欣赏。

Facebook软件工程师Jing Chen,说MVC非常适合小型应用,但是当系统中有很多的模型与相应的视图时,其复杂性就迅速扩大,如下图所示:

alt text

根据Chen的说法,这样的程序将会非常难以理解和调试,特别是模型与视图间可能存在的双向数据流动,因此提出了以下Flux设计:

alt text

Store包含了应用的所有数据,Dispatcher替换了原来的Controller,当Action触发时,决定了Store如何更新。当Store变化后,View同时被更新,还可以生成一个由Dispatcher处理的Action。这确保了数据在系统组件间单向流动。当系统有多个Store和View时,仍可视为只有一个Store和一个View,因为数据只朝一个方向流动,并且不同的Store和View之间不会直接影响彼此。

全文见: http://www.infoq.com/cn/news/2014/05/facebook-mvc-flux

哪位有兴趣讨论一下?

共15条回复
surrender 回复于 2014年05月20日

好高端的样子。

coredump 回复于 2014年05月20日

把Action看成Signal, 把Dispatcher看成EventLoop Manager, 这个FLUX就是传统GUI里面成熟了很多年的MV模型, 比如 Qt的MV (http://qt-project.org/doc/qt-4.8/modelview.html)模型就是不带C的。 MVC中的C是个紧耦合点,用的好,搞通用了,开发时就不需要程序员写C的具体实现了,Signal-Slot加Event Loop(Dispatcher)就搞定了,WEB开发这么多年,流行的架构设计其实一直都比较混沌。

brambles 回复于 2014年05月20日

2楼 @coredump

这么一看还真是这种结构

尼克徐 回复于 2014年05月20日

2楼 @coredump 非常同意你说的。

原则上,耦合度越高的地方,越简单越好。比如,工厂类。这个Dispatcher就体现了这一点(文中提到,Dispatcher中没有业务逻辑)。

这里面很有意思的还有那个“数据只朝一个地方流动”,一般写程序都是把数据绑定在ui上,互相影响,但随着逻辑的添加和变动,容易使得程序越来越复杂。

强制数据单向流动,此时view的写法就简单太多了,这个view就象是根据数据来显示一个报表或者画图。

当然还要挂一些事件,注册到dispatcher上。但这种随时可调整的注册事件,让model与view之间的藕合度就很低了。

看起来这种结构很清晰,易实现和维护。

terryso 回复于 2014年05月21日

最近对RAC + MVVM比较有兴趣。。。

terryso 回复于 2014年05月21日

不好意思,看错了。。。原来讲的是WEB开发。。。

尼克徐 回复于 2014年05月21日

6楼 @terryso 无论是web开发,还是其他的开发,这个mvc结构什么的,思路都是类似。

terryso 回复于 2014年05月21日

我是说我讲的RAC + MVVM,这个是iOS的。。。

尼克徐 回复于 2014年05月21日

8楼 @terryso 你说的这个也很不错啊。

刚查到这篇文章,很有意思。

http://blog.leezhong.com/ios/2013/12/27/reactivecocoa-2.html

找个时间我好好看看。

最近一直在想着弄一个合适的ui框架,希望适用于多平台,积木式。

terryso 回复于 2014年05月21日

9楼 @尼克徐 其实RAC + MVVM就等于.NET的WPF + MVVM,由于.NET的WPF的绑定功能超强,使得用起MVVM模式非常爽

coredump 回复于 2014年05月21日

9楼 @尼克徐 ojc也reactive了啊,不错, reactive programmingdeclarative programming结合效果最佳,一般的过程式编程语言想要reactive programming就得上MVVM这样比较啰嗦的“模式”。

尼克徐 回复于 2014年05月21日

10楼 @terryso 谢谢,有时间我会看看这方面。

11楼 @coredump 我会看多个类似模式,结合一下,搞个东西。

kxdd2002 回复于 2014年05月25日

不知道是我一直理解的不对还是其它原因,

这哥们真是facebook的吗?

是他自己一直把mvc用错了吧,还自己重新发明了遍mvc并命了个新名。。。

谁说mvc不能实现数据单向移动的。。。谁让他view直接操作m的?谁说应该那样用c的?

难道是我一直在用错误的mvc所以还没出现这哥们的问题?

pinxue 回复于 2014年05月26日

13楼 @kxdd2002 你不是一个人在战斗。去看 Reddit上的评论

rockyfire 回复于 2014年05月26日

mvvm在javascript很早就有实现了. knockoutjs

本帖有15个回复,因为您没有注册或者登录本站,所以,只能看到本帖的10条回复。如果想看到全部回复,请注册或者登录本站。

登录 或者 注册
[顶 楼]
|
|
[底 楼]
|
|
[首 页]