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
哪位有兴趣讨论一下?
把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开发这么多年,流行的架构设计其实一直都比较混沌。