MVC --- MVP --- MVVM
对于这3种结构, 每个人都有不同的理解, 我想说说我的理解.
M是model(数据模型), V是View(界面UI), C是(controller控制器)
这些模型里, 永远有M, 说明M是不变的, 一直需要的. V也同理. 写程序的时候, 是什么样的, 写好View, 写好model, 创建Activity / UIViewController. 在里面创建view, 发起请求, 获得数据, 转换成model. 在将model的数据, 显示到view上.
但是如何将Model的数据, 显示的View上呢, 因此, 出现了各种模式.
MVC, 在C中做操作.
MVP, 在P中做操作.
MVVM, 在VM中做操作.
说明无论 C, P, VM是什么, 他们都是处理Model和View的. 就是处理的方式不同. 为了提高扩展性, 维护性. C,P,VM的目的就是为了复用各种不同的模块, 如果程序中, 很多View比较重复(或者说,更高效的使用View), 那么可以试试MVVM, 用VM.
想复用Model(或者更高效的使用Model), 那么就可以试试MVP.
如果View样式多, Model也难以复用. 那么MVC也许比较合适.
无论用什么模式, 目的都是为了使程序更好的维护, 迭代.
在移动开发(Android / iOS)中, V是View, M是Model, C是Activity / UIViewController. 不是说, 不用Activity / UIViewController 的不是MVC. 也不是说用了 Activity / UIViewController 就是MVC. MVVM里的VM模块, 肯定也是在 Activity / UIViewController 中进行初始化, 在把View和Model关联起来的.
在Activity / UIViewController 中直接把Model 传到 View中、把Model的数据取出来, 直接给View上的控件设置数值. 不同的操作方法, 导致了结构得分支.
View中直接接受Model. 那么View就依赖Model了, 同时也在Model中可以拿到所有想要的东西.
View只接受控件参数的设置. 比如View.setLabelText = model.text .那么view就不依赖Model, 数据哪里来的, View不关心.
Activity / UIViewController 中直接进行Model和View的数据组装, 那么代码会很多.不如 new / init 一个Class util, util.setView = View, util.setModel = Model. 在util中进行数据组装.
MV-X 就是使用了各种不同的封装模式, 将原本一个文件中编写的代码, 分散到了很多的文件中, 使他们的功能单一, 纯粹, 以将复杂的功能拆成简单的模块.
在用不同的方式进行重新组合.