上海快风信息科技有限公司将来跳槽用

对于MVVM中的ViewModel的使用总结

2016-09-03  本文已影响136人  码工人生

-.MVVM在什么情况下使用?

   在刚写代码的初期,还处于学徒阶段时,绝大部分用的都是MVC框架,尤其很多的培训机构里面的老师,也是主张使用MVC框架。当一个很复杂的功能集中要在一个Controller中实现时,你就不知不觉的发现我这个Controller的代码已经超过了1000行。当项目迭代几个版本后,你的同事来修改这个Controller的代码时,心中必然有一堆怒火。其实这个时候,你就需要用MVVM了,让ViewModel来分担Controller既多又复杂的那部分内容。

二.哪些内容需要放在ViewModel中?

    这是一个很值得思考的问题。我的建议是,如果一个Controller非常简单,只是请求完数据,然后赋值给view的空间的话,那么完全没必要使用ViewModel,换句话来说,200行以下的Controller可以实现所有的需求的话,没必要建立ViewModel.有着复杂逻辑,需要封装出很多新的方法,那么这些复杂的逻辑都需要放到ViewModel中去。

把凡是牵扯需要逻辑的方法,以及从任何入口进去到Controller的数据(eg:上一个类传过来的数据,网络请求获取的数据等等)都需要放在ViewModel中。这样你的Controller看上去就十分简洁。只剩下View的引入,赋值给View,别人修改你的代码也会很快。以下是我目前项目中使用的一个ViewModel.

@interface ApplyForUpgradeViewModel : NSObject

/**

*  是否是自愿改签,默认是YES

*/

@property (nonatomic,assign) BOOL  isVoluntary;

/**

*  是否申请改签为同一航班,默认是YES

*/

@property (nonatomic,assign) BOOL  isApplySameAirline;

/**

*  要申请改签的乘客

*/

@property (nonatomic,strong) NSMutableArray  *  exsitPersonsArray;

/**

*  期望时间

*/

@property (nonatomic,copy) NSString  *  hopeDate;

/**

*  期望航司

*/

@property (nonatomic,copy) NSString  *  hopeAirline;

@property (nonatomic,copy) NSString  *  hopeTime;

@property (nonatomic,copy) NSString  *  hopeClass;

@property (nonatomic,copy) NSString  *  remark;

/**

*  遍历得到已经存在的乘客

*

*  @return 已经存在的乘客

*/

- (FltPassenger  *)findHasContainPersonInPassengers:(FltPassenger  *)passenger;

/**

*  刷新局部的tableview

*

*  @param tableView 指定的tableview

*  @param section  指定的section

*  @param row      指定的row

*/

- (void)reloadTableview:(UITableView  *)tableView  withSection:(NSInteger)section  andRow:(NSInteger)row;

/**

*  检查是否所有必传字段已经赋值

*

*  @return

*/

- (BOOL)checkRequestWithSelectFlight:(FlightClassDataItem *)selectFlight;

@end

三.ViewModel使用时的一些误区

   我们习惯了对于MVC的认识,认为一个Model,一个View,一个Controller就是配套的,就是一对一的关系。所以也导致一个错误的认识,一个Controller也必须对应一个ViewMolde。这种认识是不对的。

   ViewModel是干嘛的,是Controller的server,是他的服务员。只要其他的顾客也需要服务员的服务,并且顾客的需求十分相似,这个server完全能够给几个不同的顾客提供相同的服务,可能只是服务费不同罢了。因此我们要知道,一个ViewModel其实是可以给不同的Controller提供方法处理,逻辑实现的地方。前提是这几个Controller有很多的相似的功能需要实现。只要你把ViewModel用的话,你的代码一定会变得好看,也利于修改和扩展。

  以上只是个人在Coding的时候一些心得,有不当之处,敬请指正。

上一篇下一篇

猜你喜欢

热点阅读