写给iOS小白的MVVM教程(序)

这几天,需要重构下部分代码,这里简要记录下.但是涉及的技术要点还是很多,所以分为多个篇章叙述.此教程来源于,并将于应用于实践,不做过多的概念性阐释和争论.每个篇章都会附上实际的可执行的代码.因涉及的技术点,有许多探索的部分,暂定每两天更新一个篇章.欢迎广大iOS同行,批评指正!

教程内容,按更新顺序排序

  • 从MVC到MVVM: 结合实际的例子,提出并应用一种从MVC迁移到MVVM的可行性方案.
  • 使用RestKit简化网络请求: 此处会结合RestKit,提出并制作一个可直接应用于代码的网络请求实现方案,支持自动翻页,自动配置URL与数据模型的关联关系等.
  • 使用MVVM模式,实现iOS122.com网站的博客阅读: 会涉及到使用Leancloud做服务器端,使用marddown库解析markdwon内容,一个更加实际的MVVM各技术细节的具体实现技巧.

定义良好的接口,是成功的第一步!

//
//  YFMVVMDelegate.h
//  iOS122
//
//  Created by 颜风 on 15/10/13.
//  Copyright (c) 2015年 iOS122. All rights reserved.
//

#import <Foundation/Foundation.h>
@protocol YFMVVMRequestDelegate;



/**
 *  MVVM协议,用于规定MVVM模式的基本约定.
 *
 *  常用于约定"V",此处的V,指的是视图的载体,或者是连接点.可以是一个View,也可以是一个控制器,或者任意NSObject对象.
 */
@protocol YFMVVMDelegate <NSObject>

@required
@property (nonatomic, strong) id model; //!< 数据模型,用于表示从外部传入的数据.
@property (nonatomic, strong, readonly) id viewModel; //!< 数据模型,用于表示直接在视图上显示的数据模型.

@optional
@property (nonatomic, strong) id<YFMVVMRequestDelegate> request; //!< 网络请求.用于联网动态更新数据.

@end

/**
 *  用于规定MVVM中的request网络请求的协议.
 */
@protocol YFMVVMRequestDelegate <NSObject>

@required

/**
 *  获取数据.
 *
 *  @param component   MVVM组件中的V部分,可以是一个View,也可以是一个控制器,或者任意NSObject对象.
 *  @param success     请求成功时的回调.会把视图模型回调出去.
 *  @param failure     请求失败时的回调.会把错误信息回调出去.
 */
-(void) get: (id<YFMVVMDelegate>) component
    success: (void (^)(id))success
    failure:(void (^)(NSError *))failure;

@optional

/**
 *  重置页码,从头刷新.
 *
 *  下次调用 get:success:failure 方法时,会获取最新的数据.
 */
-(void) reset;

/**
 *  移动到下一页.
 *
 *  下次调用 get:success:failure 方法时,会获取下一页的数据.
 */
-(void) nextPage;

@end

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏coolblog.xyz技术专栏

MyBatis 源码分析系列文章合集

我从七月份开始阅读MyBatis源码,并在随后的40天内陆续更新了7篇文章。起初,我只是打算通过博客的形式进行分享。但在写作的过程中,发现要分析的代码太多,以至...

1596
来自专栏java工会

MVC设计模式

MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器...

820
来自专栏CSDN技术头条

Android应用架构前世今生

前言 Android的开发生态系统发展迅速,在开发Android的几年的时间里,用来构建Android应用的架构与技术一直在不断进化。随着项目的不断更新迭代,应...

1917
来自专栏WeTest质量开放平台团队的专栏

面向亿万级用户的QQ一般做什么?——兴趣部落的 Web 同构直出分享

本文的目的在于解决两个问题:1、 部落是怎样从一个纯前端项目改造成同构直出项目的。2、在访问量这么大的情况下,如何保证直出服务的可用性的问题。

2990
来自专栏七夜安全博客

go go go - beego

在上一篇文章What!!! so fast中,我介绍了golang这种语言,并使用golang开发了一个端口扫描工具。现在我的主要工作是做网络安全方面的开发与策...

1052
来自专栏全华班

一款免费、开源,使用sprinbboot快速开发管理系统

BootDo是在SpringBoot基础上搭建的一个Java基础开发平台,MyBatis为数据访问层,ApacheShiro为权限授权层,Ehcahe对常用数据...

701
来自专栏吴伟祥

通信协议之Protocol buffer(高效的数据压缩编码方式之Java篇)

之前一直习惯用json进行数据的传输,觉得很方便。来到新公司后发现同事们用的更多的的协议都不是json,而是Protocol buffer。这个东西之前没有听说...

573
来自专栏刘望舒

Android 模块化之路 模块间通信

1442
来自专栏java一日一条

前端优化带来的思考,浅谈前端工程化

这段时间对项目做了一次整体的优化,全站有了20%左右的提升(本来载入速度已经1.2S左右了,优化度很低),算一算已经做了四轮的全站性能优化了,回顾几次的优化手段...

413
来自专栏CDA数据分析师

Python程序员都会喜欢的6个库,拿走不谢!

在编程时,小挫折可能与大难题一样令人痛苦。没人希望在费劲心思之后,只是做到弹出消息窗口或是快速写入数据库。因此,程序员都会喜欢那些能够快速处理这些问题,同时长远...

1695

扫码关注云+社区