谈到MVVM不得不先说一下MVC,MVC(Model-View-Controller)。
Model模型:用来呈现数据。
View视图:用来呈现用户界面。
Controller控制器:用来调节模型与视图之间的交互。
它们中的一些确实属于 View Controller,但更多的是所谓的“表示逻辑(presentation logic),为了不让控制器日益增大,便于测试管理,便出现了MVVM。
MVVM:它其实是一个 MVC 的增强版,并将表示逻辑从 Controller 移出放到一个新的对象里,即 View Model。
在 iOS 上使用 MVVM 的动机,就是让它能减少 View Controller 的复杂性并使得表示逻辑更易于测试。
ViewModel: 它位于 View/Controller 与 Model 之间。
代码示例:
2、然后是View层的代码,View层控件全部用懒加载方式,尽可能减少内存消耗,不喜欢用XIB,所以习惯纯代码编写。
3、接下来是ViewModel层,对封装好的NetWork进行处理,request网络数据存储在HomeModel里,最后将数据用Block带出去,方便在VC中使用数据,reloadData。
4、最终,HomeViewController 将会变得非常轻量级:
其实 MVVM 并没有想像中的那么难吧,而且更重要的是它也没有破坏 MVC 的现有结构,只不过是移动了一些代码,仅此而已。总结下 MVVM 相比 MVC 到底有哪些好处呢?
主要可以归纳为以下三点:
1、由于展示逻辑被抽取到了 viewModel 中,所以 view 中的代码将会变得非常轻量级;
2、由于 viewModel 中的代码是与 UI 无关的,所以它具有良好的可测试性;
3、对于一个封装了大量业务逻辑的 model 来说,改变它可能会比较困难,并且存在一定的风险。在这种场景下,viewModel 可以作为 model 的适配器使用,从而避免对 model 进行较大的改动。
通过前面的示例,我们对第一点已经有了一定的感触,至于第三点,可能对于一个复杂的大型应用来说,才会比较明显。
综上所述,我们只要将 MVC 中的 controller 中的展示逻辑抽取出来,放置到 viewModel 中,然后通过一定的技术手段,来同步 view 和 viewModel ,就完成了 MVC 到 MVVM 的转变。
Model模型:用来呈现数据。
View视图:用来呈现用户界面。
Controller控制器:用来调节模型与视图之间的交互。
它们中的一些确实属于 View Controller,但更多的是所谓的“表示逻辑(presentation logic),为了不让控制器日益增大,便于测试管理,便出现了MVVM。
MVVM:它其实是一个 MVC 的增强版,并将表示逻辑从 Controller 移出放到一个新的对象里,即 View Model。
在 iOS 上使用 MVVM 的动机,就是让它能减少 View Controller 的复杂性并使得表示逻辑更易于测试。
ViewModel: 它位于 View/Controller 与 Model 之间。
代码示例:
1、首先是model层的代码,基于JSONModel封装了BaseModel类(基类:以后的Model都可继承此类),继承自BaseModel,实现HomeModel类。
2、然后是View层的代码,View层控件全部用懒加载方式,尽可能减少内存消耗,不喜欢用XIB,所以习惯纯代码编写。
3、接下来是ViewModel层,对封装好的NetWork进行处理,request网络数据存储在HomeModel里,最后将数据用Block带出去,方便在VC中使用数据,reloadData。
4、最终,HomeViewController 将会变得非常轻量级:
其实 MVVM 并没有想像中的那么难吧,而且更重要的是它也没有破坏 MVC 的现有结构,只不过是移动了一些代码,仅此而已。总结下 MVVM 相比 MVC 到底有哪些好处呢?
主要可以归纳为以下三点:
1、由于展示逻辑被抽取到了 viewModel 中,所以 view 中的代码将会变得非常轻量级;
2、由于 viewModel 中的代码是与 UI 无关的,所以它具有良好的可测试性;
3、对于一个封装了大量业务逻辑的 model 来说,改变它可能会比较困难,并且存在一定的风险。在这种场景下,viewModel 可以作为 model 的适配器使用,从而避免对 model 进行较大的改动。
通过前面的示例,我们对第一点已经有了一定的感触,至于第三点,可能对于一个复杂的大型应用来说,才会比较明显。
综上所述,我们只要将 MVC 中的 controller 中的展示逻辑抽取出来,放置到 viewModel 中,然后通过一定的技术手段,来同步 view 和 viewModel ,就完成了 MVC 到 MVVM 的转变。