MVVM的思考

MVC总结

M应该做的事:

  • 给ViewController提供数据
  • 给ViewController存储数据提供接口
  • 响应数据请求一般来是ViewController的
  • 提供经过抽象的业务基本组件,供Controller调度(比如常用的dataModel)

M不应该这是dataModel 而是整个Model层

C应该做的事:

  • 管理View Container的生命周期
  • 负责生成所有的View实例,并放入View Container
  • 监听来自View与业务有关的事件来操作View或者model

V应该做的事:

  • 响应与业务无关的事件,并因此引发动画效果,点击反馈(如果合适的话,尽量还是放在View去做)等。
  • 界面元素表达

MVVM要考虑的问题

  1. MVVM具体应该怎么写 各个部分应该负责那些事儿不
  2. View和VM是否不应该持有
  3. 网络请求应该写在什么地方,请求是否应该放在C中
  4. MVVM中的数据流应该怎么流动
  5. VM应该和M直接交互吗?还是需要通过C调度,VM和M直接交互会不会导致VM和具体业务产生强烈耦合,导致VM的可移植性降低?
  6. M中放置对数据的增、删、改、查
  7. VM是不是只做抽象数据和形象数据的转化,即可能将查到的数据转化为View展示需要的形式(即数据转换),而不应该对后台数据做任何处理 ,因为这是M应该做的事
  8. VM只处理View需要展示的数据

MVVM学习

本文来自浅谈 MVC、MVP 和 MVVM 架构模式

MVP是MVC变种,采用了Presenter将视图和模型进行了解耦,采用了监督控制器,将视图层和模型层的一些属性进行了绑定

MVVM 采用了PresentModel理念,PM即将视图的所有全部状态和行为抽象为一个模型,为视图层提供了一个接口,PM通过引入展示模型,将模型层中的数据和复杂的业务逻辑封装为简单的数据并暴露给视图,让视图和展示模型中的属性进行同步。
展示模型PM中包含所有的视图渲染需要的动态信息,包括视图的内容(text、color)、组件是否启用(enable),除此之外还会将一些方法暴露给视图用于某些事件的响应

在PM模式中,同一个展示模型可以与多个领域对象交互,多个视图可以使用相同的展示模型,但是每一个视图只能持有一个展示模型。