MVVM在MVC的基础上,增加了一层 ViewModel,目的是为了解决 MVC 架构模式中 ViewController 过于臃肿的问题,基本结构如图:
MVVM
ViewModel 有以下特点:
- ViewModel 持有 Model,但不能包含任何UI对象。
- View只处理数据,而不处理UI交互逻辑。
- ViewModel 的独立性,使得它便于单元测试,也能够被多个 View(ViewController)复用。
初学者往往将UI对象设计为ViewModel的属性,甚至还抑制不了在 ViewModel 中处理页面导航的冲动,结果导致 ViewModel 成为另一个 ViewController,我们知道 ViewController 还处理了如旋转等设备事件,结果导致 ViewController 和 ViewModel 紧耦合,上面提到的特点3也就无从谈起。
也有很多初学者希望MVVM能减少其开发量,实际上,由于 ViewModel 层是新增加的一层,负责的是数据加工
,如字符串拼接、数据格式化等工作,并没有代替 ViewController 管理 View 交互的职责,加上额外的与 ViewModel 交互的工作,代码量是增加的,如果开发团队人力资源有限,项目没有延续性(一个项目开发的成果很少能延续到下一个项目),是否使用MVVM就需要慎重平衡。
因此 MVVM 既不是更高级的 MVC,也不是iOS开发开发的“银弹”,就像一家石油公司,在大范围中运输中,石油管道有无比优势,但如果只是将油运到一个农村的农机加油站,小油罐车就变得更有优势。
思考题:
网络请求一直是导致 ViewController 臃肿的罪魁祸首,MVVM中,应该将网络请求放到哪一层,为什么?欢迎你的留言。
网友评论