先说一下为什么要讲框架的设计。

  第一、IM应用一般是基于长连接的,也就是后台一直在收发数据,那这里就有一个后台的概念;

  第二、如果用户是一个人群里面的中心人物的话,那么他的的数据量就会很大。页面的显示及数据库的处理就需要关注了;

  第三、分解app有利于我们降低耦合,在后期维护和升级时,稍微容易一点。

  我觉得框架就是先拆解部件再建立联系。框架有很多种,我借鉴的是依赖注入。

依赖

  这个模块是所有部件运行的中间节点,负责app内的信息传递和数据处理。因此,app运行时他就必须存在。那这里有两个合适的人选,一个是AppDelegate,一个是他的RootViewController。这里我选择的是RootViewController,原因我说一下一下:1、我使用了CoreData,也需要处理APNS,所以AppDelegate已经很魁梧了;2、我的app是基于TabBarViewController,而TabBarViewController对用户是不可见的,他不需要处理UI,而且几个主要页面都是他的viewcontrollers,方便调用。

  选好了之后,我们需要明确他的作用。我给他分配了这几件事情:处理网络模块推送来的数据,存入数据库,推送数据更新的通知到各个页面。也就是外部的数据,到这里就止步了,不会直接操作UI界面。

网络通讯

  这个模块负责和服务器的数据传输,app运行阶段都不可以被销毁。所以,这个模块需要使用单利模式来创建,并且放在全局线程中。这个模块对外就是收发数据;对内就是传递数据到依赖和接受UI界面的发送指令。也就是他只管收发数据,不操作UI和数据库。

数据库

  他负责增删改查。。。(他好轻松,只要出个API就好了)

UI界面

  这里指app所有可视、可交互页面。所有你想掐死产品的原因都展示在这里。然而这是用户可见的,也就是说,不能卡顿,要好操作等等。有些页面会有很多的UI交互,为此我们不能给他太多负担。那我就让他做两件事,展示和发送请求。展示是他本来的工作,取一下数据库,更新UI;请求是一个接口,他只要抓取页面的数据填进去就好了。

  总结一下:将每个模块拆开之后,他们所做的事情就很明确,数据的来源也得到了保证,UI的处理逻辑也简单。全API的调用方式便于后期拓展。

附简图:

转载于:https://www.cnblogs.com/akforsure/p/5302288.html

iOS IM开发建议(一)App框架设计相关推荐

  1. WWDC15 iOS游戏开发3个新框架全解

    简介 在此次WWDC的游戏相关视频中,苹果再一次展现了它非凡的技术整合和持续创新能力.除了继续完善已有的2D游戏框架SpritKit, 3D游戏框架SceneKit和全新的图形渲染API Metal ...

  2. iOS常用开发工具及第三方框架

    iOS开发中使用到的工具,以及为了避免重复造轮子,也为了更快.更有效的地进行开发,常常引用的第三方框架,像网络请求的AFNetworking,数据持久化的FMDB,请求提示符MJRefresh,还有数 ...

  3. 【Qt编程】基于Qt的词典开发系列一--词典框架设计及成品展示

    去年暑假的时候,作为学习Qt的实战,我写了一个名为<我爱查词典>的词典软件.后来由于导师项目及上课等原因,时间不足,所以该软件的部分功能欠缺,性能有待改善.这学期重新拿出来看时,又有很多东 ...

  4. 云炬Android开发笔记 12基于WebView的混合App框架设计(包含浏览器与原生请求Cookie的处理)

    阅读目录 1.WebView高可扩展性封装 1.1 发现模块的框架搭建 1.2 webView的基类 1.3 对webview基类的实现 1.4 setInitializer的方法的实现 1.5 we ...

  5. iOS游戏开发之使用 Spritekit 框架和 Swift 的 iOS 2D 太空射击游戏(教程含源码)

    实战需求 使用 Spritekit 框架和 Swift 的 iOS 2D 太空射击游戏 本文价值与收获 看完本文后,您将能够作出下面的界面 实战代码 1.主界面 import SpriteKit im ...

  6. iOS 跨平台开发,该用 Flutter 还是 Swift?

    [CSDN 编者按]在商业和开源代码中被广泛使用的 Flutter 和 Swift 你更中意哪一个呢?本文对两者的优势.性能.流行度等方面进行比较分析,帮助您找出更适合自己项目的框架或语言. 作者 | ...

  7. 计算机类电影制作专业大学,大学本科计算机专业 电影资讯类APP的设计与实现毕业论文.doc...

    PAGE 基于iOS端电影资讯类APP的设计与实现 学院名称: 软件学院 专业名称: 计算机科学与技术 年级班别: 姓 名: 指导教师: __________ 年 月 本科毕业论文 PAGE 20 基 ...

  8. Android通用框架设计与完整电商APP开发系列文章

    作者|傅猿猿 责编|Javen205 有福利 有福利 有福利 鸣谢 感谢@傅猿猿 邀请写此系列文章 Android通用框架设计与完整电商APP开发 课程介绍 [[导学视频](http://szv1.m ...

  9. iPhone开发教程之iOS APP体验设计 - 醒醒吧 ))))) - majszt - 和讯博客

    iPhone开发教程之iOS APP体验设计 iPhone开发    |   更新时间:2012-10-15   |   点击:131    |   来源:本站 iOS APP体验设计不像互联网的体验 ...

最新文章

  1. Linux基础第一周
  2. Verilog中memory数据类型
  3. windows 搭建python 虚拟环境 写程序_Windows下搭建Python虚拟环境
  4. 算法之基础数论应用篇(一)
  5. NET命令的基本用法
  6. 【ElasticSearch】Es 源码之 ResponseCollectorService 源码解读
  7. python循环一段代码_Python循环语句代码详解:while、for、break
  8. 中国挤奶点控制器市场趋势报告、技术动态创新及市场预测
  9. 亿阳信通中标9321.91万元智慧城市建设项目
  10. 应用密码学:协议、算法与C源程序(学习第二章)
  11. 解决centos7安装wps后的光标跟随问题
  12. Java游戏开发中应始终坚持的10项基本原则
  13. CORS Filter
  14. 手机百度脑图app_百度脑图下载-百度脑图app手机安卓版下载-沧浪手游
  15. c语言大地坐标转换空间坐标,空间直角坐标系与大地坐标系转换程序
  16. word,excel文件双击打开慢的问题
  17. 我,27岁,程序员,9月无情被辞:想给做开发的提个醒…
  18. 27年,IE时代终落幕
  19. 【python向日葵】愿我们的生活像向日葵一样灿烂~~~
  20. 转载 如何用示波器进行UART串口数据分析

热门文章

  1. shell写入文件,后面会覆盖前面
  2. 关于字符集的简单介绍
  3. linux openssl 证书,Linux上的openSSL证书验证
  4. Go底层剖析 | 好书中秋赠送中
  5. Laravel核心解读--Cookie源码分析
  6. php基本类,php入门一之十大基本类型
  7. 【4】搭建Docker私服harbor
  8. Java网络编程-1
  9. Node.js之------模块篇
  10. MyEclipse安装EGit插件方法