iOS-MVVM设计模式

谈到MVVM不得不先说一下MVC,MVC(Model-View-Controller)。


Model模型:用来呈现数据。


View视图:用来呈现用户界面。
Controller控制器:用来调节模型与视图之间的交互。

  


在 iOS 应用中日益增长的重量级视图控制器的问题。在典型的 MVC 应用里, 许多逻辑被放在 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 的转变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值