MVC与MVVM

2018-06-07  本文已影响0人  夜雨聲煩_

MVC

最基本的还是 MVC,MVC 的问题在于 C 过于庞大。在最初编写代码的时候一个 C 有时候要上千行。
传统 MVC 造成 C 庞大的原因:

解决方案:

这样 C 作为 UI 层的视图控制器,只进行简单的 view 加载,视图控制器间切换,调用业务层接口,将业务层 model 转化成 UI 层 model 赋值。
优点:网络层-业务层-UI 层-数据库,明确的层级划分,较好的解耦性,大项目开发中各自负责各自的模块,不会干涉开发进程(UI 图没出、接口没通、业务变动。。。)。
缺点:各自层有各自层的 model,代码重复,需要转换。(各自层有各自的 model,业务的 model 不关心 UI 展示,UI model 处理业务层 model 只关心自己要展示的,虽然代码量多了些,但是感觉挺好的,有啥问题继续反思。。也请大家赐教。。)

MVVM

MVVM 的出现是为了解决上述中 C 过于臃肿的情况。不同于把 C 中网络业务等完全抽出成新的层,MVVM 是划出 VM 来处理这些。
如果把上面 MVC 的优化看成是 MVC+Manager,那么 MVVM 实际上就是 VM 对应 Manager

个人觉得 MVVM 的划分实际上是 VC - VM - M 这三个部分。
使用 MVVM 模式的话大多比较适合用 XIB(不用 xib 的话 c 其实没多大,没必要一定用 mvvm ),这样 view 和 controller 其实可以看做是一体,然后划分出 viewModel 来实现网络请求、业务逻辑处理、以及 model 封装,选择性把 vc 需要的属性从 model 中提取出来作为 vm 的属性暴露给 vc。
这样的话 model 可以尽量统一合并化,这样一个 vc 对应一个 vm(复杂页面的子 view 会 对应子 viewModel,但是总体还是一对一),但可能会多个 vm 对应一个 model。

MVVM+RAC

viewModel 作为 binder 夹在 vc 和 model 中间。Model 变化时,ViewModel会自动更新,而ViewModel变化时,View 也会自动变化,也就是双向绑定。
viewModel 暴露的永远是 model 属性封装好的信号
更多内容还在学习中。

上一篇 下一篇

猜你喜欢

热点阅读