分享 其实 Redux 是最接近传统 MVC 的

mizuhashi · 2016年02月22日 · 2364 次阅读

推一篇知乎答案: https://www.zhihu.com/question/33864532/answer/76482275

后端 MVC 清晰的原因:

  1. 系统只有一个输入源,由 Controller 分发
  2. 系统只有一个唯一 完整状态(数据库)

看到这个忽然感觉茅塞顿开,后端的数据都是要落地的,如果对照 redux 的 time travel,在后端只要把数据库 dump 了就能 time travel

有一个长久以来的思维定势: 通常前端认为的 应用状态,是后端数据在前端的映射

实际上前端的状态不止存在于 model 层,更多的是存在于 view 层,如果按后端 model 那样去设计前端 model,状态就只能存在 vm 甚至 dom 节点内部,无从管理

redux 有了 action 相当于后端有 controller,所有操作都有了来由,想想之前做的最多的就是在 view 层改 model 的数据


感觉 redux 还有些地方可以优化,store 不一定是朴素对象,也可以有 model,但是只能是只读的,把计算属性都加在上面

store 本身可以加一些用于取内容的方法,不然 store 结构一变,所有 reducer 都要改

reducer 无法组合,传统 mvc 也会需要在一次请求中多次调用 service 或 model 的方法,reducer 和 action 绑死就相当于逻辑只能全写在 controller 里,显然不合理

只要有 action(route),reducer(controller),追踪状态变化已经足够了

最后想象中一个 action 是这样:

function reducer(state){
    var customer = state.currentCustomer();
    customer = Service.modifyCustomer(customer);
    var product = customer.favoriteProduct();
    return Object.assign({}, state, state.currentCustomer(customer), state.selectedProduct(product));
}
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册