iOS开发基于MVC项目上重构举例

上一次我们讨论了iOS重构在MVC项目上的可行性,今天具体来讲基于MVC的项目重构步骤以及重构后的结构。

思考要解决的问题

回到项目重构的问题上来,我认为项目重构首先要想清楚的问题:

项目层级如何划分?

大的业务场景有哪些?

将UIViewController归类为View还是Controller?

谁来负责网络请求,Model还是Controller?

从Model中取得数据后Controller怎么把数据传递给View去展示?按照View层级逐级传递?是否需要使用ViewModel?

Model的生命周期怎么控制?(全局Model和私有Model的划分)

View层级结构越来越深时,怎么传递用户的交互操作?(毫无疑问NSNotification)

UIViewController的划分

本次重构中还是将UIViewController归类为C层,但是为了将UIViewController彻底和UIView分离开,命名上我们直接使用XXXController,我们对每一个XXXController设计了一个对应的名为的XXXContainerView的UIView对象,所有的view布局都会在这个XXXContainerView中完成.

项目目录结构

重构后的项目目录结构如下:

一级目录 子目录 目录说明

Macro 存放开发过程中所需的一些宏定义

Category 存放不涉及业务,用来辅助开发的分类

Tools 不同的业务工具类 存放涉及轻量级业务的处理类,比如根据不同业务格式化输出不同的字符串

Views 不同的业务模块页面名 存放不同业务模块页面下的V

Controllers 不同的业务模块页面名 存放不同业务模块页面下的C

ViewModels 不同数据模块名 数据翻译层,将DataInfo数据翻译为View可直接展示的数据,但本次重构中由于时间因素不强制使用

Model PublicModel 公用的全局Model,比如用户信息UserModel

MoudleModel 单独某个模块使用的私有Model,只负责私有业务

Services 不同的Service 提供底层服务,例如HttpService,SecurityService

业务场景划分

由于之前赶进度开发,没有做具体的功能拆分.本次重构之前使用了 StartUML 绘制了主要场景下的UML图,包括类图,时序图,流程图.

强烈推荐新项目正式编码之前就完成这一步,并由前后端技术负责人主持进行UML评审.所有涉及到的业务Model的property以及public方法,所有DataInfo类的属性,甚至所有的Controller都会在绘制UML的过程中产出.当然,要想绘制所有场景下的UML图可能耗时比较久,一般来说只要绘制出主要交互场景即可.

网络请求

在手机端基本上所有的网络请求都是跟业务挂钩的,显然放在Model里更合适.至于请求完成后的回调就看个人习惯了,delegate或者block都是可行的.

后续

由于时间原因,并没有写出具体的示例代码,之后会针对一个示例场景,写出我理解中的各个MV(X)模式的参考代码,期待成文后与同行探讨.

MVVM扩展

放一张MVVM的示意图:

看上去是不是很像MVP?只是多了View和ViewModel的双向绑定,这里强调一点,RAC不一定登陆MVVM,MVVM也不一定要使用RAC.想了解更多有关iOS开发(http://www.maiziedu.com/course/ios/),学习更多知识。

时间: 2024-08-02 11:01:51

iOS开发基于MVC项目上重构举例的相关文章

iOS开发中文件的上传和下载功能的基本实现-备用

感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: 复制代码代码如下: YYViewController.m#import "YYViewController.h" #define YYEnc

iOS开发之在地图上绘制出你运行的轨迹

首先我们看下如何在地图上绘制曲线.在Map Kit中提供了一个叫MKPolyline的类,我们可以利用它来绘制曲线,先看个简单的例子. 使用下面代码从一个文件中读取出经纬度,然后创建一个路径:MKPolyline实例. 1 -(void) loadRoute 2 { 3 NSString* filePath = [[NSBundle mainBundle] pathForResource:@"route" ofType:@"csv"]; 4 NSString* fi

iOS开发中MVC、MVVM模式详解

iOS中的MVC(Model-View-Controller)将软件系统分为Model.View.Controller三部分 Model: 你的应用本质上是什么(但不是它的展示方式) Controller:你的Model怎样展示给用户(UI逻辑) View:用户看到的,被Controller操纵着的 Controller可以直接访问Model,也可以直接控制View. 但Model和View不能互相通信. View可以通过action-target的方式访问Controller,比如我们在Sto

iOS开发实用技巧—项目新特性页面的处理

iOS开发实用技巧篇—项目新特性页面的处理 说明:本文主要说明在项目开发中会涉及到的最最简单的新特性界面(实用UIScrollView展示多张图片的轮播)的处理. 代码示例: 新建一个专门的处理新特性界面的控制器,可以实用代码也可以用xib,在这里实用纯代码方式,创建一个控制器NewfeatureViewController. 头文件代码: 1 // 2 // JMNewfeatureViewController.h 3 // 4 5 #import <UIKit/UIKit.h> 6 7 t

iOS开发之下拉刷新,上拉加载更多

iOS开发之下拉刷新和上拉加载更多 1.简介(在我们常见的app中都有上拉以及下拉的操作,比例QQ,微信...所以上拉以及下拉的开源库比较多 上拉下拉开源库下载) 常用的下拉刷新的实现方式 (1)UIRefreshControl (2)EGOTableViewRefresh (3)AH3DPullRefresh (4)MJRefresh (5)自己实现 (一般情况不要自己实现,竟然有了没必要) 2.AH3DPullRefresh的使用 AH3DPullRefresh 也是一个上拉下拉开源库.使用

iOS开发助手、ipa上传工具、苹果APP快速上架辅助工具Appuploader

ipa上传助手Appuploader是一个iOS APP上架辅助助手,帮助开发者可以快速的申请iOS证书打包ipa文件上传到App Store审核. 非常方便的iOS上架助手,提升上架效率. ipa上传助手Appuploader官网 ipa上传助手Appuploader介绍 一.可以在Windows系统直接申请iOS证书上传ipa(不用苹果电脑也不用装Mac虚拟机) 二.帮助不懂上架流程.初次接触上架的开发者,快速掌握上架流程 在这可以学习iOS证书申请和各类证书用法.打包ipa文件.测试iOS

iOS开发:App项目打包上传到App Store的步骤

第一步:登录苹果开发者网站 Apple Developer 第二步:进?Member Center 2.1 点击Member Center 2.2登录开发者账号 2.3进入生成证书 界面 第三步: 生成证书 3.1生成证书 3.1.1 点击添加 3.1.2 选择continue,进入发布证书创建界面 3.1.3 选择发布证书,点击next 3.1.4 选择continue,进入CSR添加界面 3.2 创建CSR 3.2.1 打开钥匙串keychain ## 3.2.2 点击屏幕上方:钥匙串访问-

iOS开发之开源项目链接

1. Coding iOS 客户端 Coding官方客户端. 笔者强烈推荐的值得学习的完整APP.GitHub - Coding/Coding-iOS: Coding iOS 客户端源代码 2. OSCHINA 的 iPhone 客户端开源中国的iPhone客户端源码https://git.oschina.net/oschina/iphone-app 3. [email protected] [email protected] iPhone 客户端,方便用户查看[email protected]

我个人对于 iOS 开发基于经验的一些总结与规划【4年开发经历】

前言: 18年快过去了一半,半年下来感觉自己还是很菜,突然想起之前和朋友聊天,朋友本身技术实力极强,业界认可度也较高.但是还是认为自己很菜.我认为这很大一部分是对于知识的敬畏心,作为程序员就需要不断的涉猎新知识,学习.而每次涉猎都发现自己的渺小- 其实完全不必畏惧知识的多,我一直认为菜可以接受,但每过一段时间回头反思,发现自己原地踏步完全不能接受- 一,关于成长 回首发现自己步入程序员的行业也有几年的光阴,记得一开始的时候,我也和很多初学者一样,四处询问怎么才能实现高速的成长,想窥探大牛们的成长