谈到MVVM不得不先说一下MVC,MVC(Model-View-Controller)。
Model模型:用来呈现数据。
View视图:用来呈现用户界面。
Controller控制器:用来调节模型与视图之间的交互。
在 iOS 应用中日益增长的重量级视图控制器的问题。在典型的 MVC 应用里, 许多逻辑被放在 View Controller 里。
它们中的一些确实属于 View Controller,但更多的是所谓的“表示逻辑(presentation logic),为了不让控制器日益增大,便于测试管理,便出现了MVVM。
MVVM:它其实是一个 MVC 的增强版,并将<b>表示逻辑</b>从 Controller 移出放到一个新的对象里,即 View Model。
在 iOS 上使用 MVVM 的动机,就是让它能减少 View Controller 的复杂性并使得<b>表示逻辑</b>更易于测试。
ViewModel: 它位于 View / Controller 与 Model 之间。
MVVM 只是将 MVC 中的 controller 中的<b>表示逻辑</b>抽取出来,放置到 viewModel 中, 在 viewModel 中实现数据的处理,(拼接, 比较, 组装等操作), 然后在控制器中使用 ViewModel 层给 View 层传递数据, 最后通过一定的技术手段,来同步 view 和 viewModel, 更新UI及修改数据等操作.
MVVM 相比 MVC 有哪些好处:
1>由于<b>表示逻辑</b>被抽取到 viewModel 中,所以 view 中的代码将会变得非常轻量级.
2>由于 viewModel 中的代码是与 UI 无关的,所有它具有良好的测试性.
3>对于一个封装了大量业务逻辑的 model 来说,改变它可能比较困难,并且存在一定的风险.在这种场景下, viewModel 可以作为 model 的适配器使用,从而避免对 model 进行较大的改动.