iOS项目架构 小谈

层级结构,自底向上

持久层(File,Realm,SQLite)<==>网络层(相信每个公司都有自己的网络层吧)==>业务层(ViewModel)==>展示层(View,VC)

持久层

耦合到网络层

设计要点

持久模型的选择,我这里选择了文件,直接缓存了JSON.txt。并且维护一张表映射到文件,实现快速获取,文件超时删除等操作。持久层的timeout设置,网络层访问到这里的时候,如果超时立即抛弃缓存

网络层

耦合到持久层

设计要点

网络层的设计是基于离散式的,即一个API接口对于一个Class。实现接口复用,有了为同一个公司的多个APP提供APIKit的可能。网络层的设计是基于数据流的。也就是说,你订阅了这个接口,以后这个接口出现刷新,加载数据等,所有的返回及时发送给所有订阅者。一份请求数据,可以多处订阅。例如在首页加载了N个接口,在详情页获取其中某个接口的返回数据,这里你不需要知道那个接口是否加载完成,直接订阅即可。接口实例是可reload,可refresh,可nexPage得,具体基于业务实现是有缓存开关的是可adaptation的。这里可要求过来接收数据的类型实现JSONConvertable协议是可以统一catch一些errors的。

业务层

业务层耦合网络层

设计要点

这里的业务层就抽象成一个若干个ViewModelViewModel维护各种数据流,状态。部分数据是要提供给展示层的展示层和业务层相互订阅。

展示层

展示层和业务层耦合

设计要点

View单纯的包含View。哈哈这里递归了。View也提供事件流,以供和业务层进行绑定。例如这里的view里有一个button,点击button提交数据。这个数据肯定在ViewModel里了。所有,view提供一个buttonClick的信号,ViewModel提供的UploadData的操作。两者绑定即可。ViewController,主要在这里进行业务层ViewModel和视图View的绑定,解绑。



转载自: http://fengdeng.github.io/blog/2016/05/24/xiang-mu-jia-gou-xiao-jie-ios/

转载于:https://www.cnblogs.com/Jenaral/p/5616145.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机基础:存储系统知识笔记(二)

1、高速缓存 1.1 定义 用来存放当前最活跃的程序和数据。 特点&#xff1a;容量在几千字节到几兆之间&#xff0c;速度比主存快5~10倍左右。快速半导体组成。 1.2 高速缓存的组成 一般位于CPU和主存之间。主要包括管理模块、由相联存储器构成的存储表、小容量的高速存储器。 1.…

spu和sku区别

SPU(Standard Product Unit) 标准化产品单元 SPU是能够描述一个产品的单元&#xff0c;比如说&#xff0c;iPhone8就是一个SPU&#xff0c;与商家、颜色、款式、套餐无关。 SKU(Stock Keeping Unit) 库存量单元 SKU是用来定价和管理库存的&#xff0c;比如说&#xff0c;iPhon…

2020html5开发工具,2020web前端学习路线

原标题&#xff1a;2020web前端学习路线2020年最新web前端学习路线&#xff01;接下来&#xff0c;教大家如何从零基础小白学习web前端&#xff0c;没有基础的伙伴也不要着急&#xff0c;有给大家整理视频教程&#xff0c;文末&#xff0c;大家按需学习就好&#xff01;一、入门…

layuiajax提交表单控制层代码_漏洞预警|ThinkPHP 5.0 远程代码执行

漏洞预警|ThinkPHP 5.0 远程代码执行2019-01-11事件来源2019年1月11日&#xff0c;ThinkPHP Github仓库发布了新的版本v5.0.24&#xff0c;包含重要的安全更新&#xff0c;山石安服团队经过分析把该漏洞危险级别定为严重。漏洞描述ThinkPHP是一个快速、兼容而且简单的轻量级国产…

oracle sql日期比较

oracle sql日期比较: 在当前时间之前: select * from up_date where update < to_date(2007-09-07 00:00:00,yyyy-mm-dd hh24:mi:ss) select * from up_date where update < to_date(2007-09-07 00:00:00,yyyy-mm-dd hh24:mi:ss)在当前时间只后: select * from up_date w…

微信商户平台结算周期T+1是什么意思

我们在商户平台的管理后台&#xff0c;有的时候&#xff0c;用户支付了&#xff0c;可是却没有看到有资金信息&#xff0c;这个一般是因为您的账户类似的T1的原因。那结算周期T1是什么意思呢&#xff1f; 通俗的理解就是&#xff1a;交易日的次日。 T就是today &#xff08;今天…

计算机基础:存储系统知识笔记(三)

1、相联存储器 1、相联存储器介绍 属于按内容访问的存储器。 原理&#xff1a;把数据或数据某一独立单元作为关键字&#xff0c;用该关键字和存储器的每个存储单元比较&#xff0c;相同则表示找到对应的存储单元。 2、相联存储器的组成部件 1、输入检索寄存器&#xff1a;存放要…

事业单位考试题库计算机网络,2015年事业单位计算机基础知识试题及答案

2015年事业单位计算机基础知识试题及答案一、单选题1、根据报文交换的基本原理&#xff0c;可以将其交换系统的功能概括为A)存储系统 B)转发系统C)存储-转发系统 D) 传输-控制系统2、TCP/IP网络类型中&#xff0c;提供端到端的通信的是A)应用层 B) 传输层C)网络层 D)网络接口层…

list 排序_十个必知的排序算法|Python实例系列

十大排序:1.冒泡排序2.选择排序3.插入排序4.希尔排序5.归并排序6.快速排序7.堆排序8.计数排序9.桶排序10.基数排序完整代码和注释如下# -*- coding: UTF-8 -*-#Space: https://github.com/Tri-x/exercise#Space: https://space.bilibili.com/187492698#Author: Trix#Descriptio…

MySQL的安装及使用教程

MySQL的安装及使用教程 一、 MySQL的下载及安装 首先登陆MySQL的官网&#xff0c;选择Downloads→Windows→MySQL Installer→Windows(x86,32-bit),MSI Installer 在安装的时候&#xff0c;可能要下载 .net Framework&#xff0c;直接下载就行&#xff0c;接着一步一步安装就可…

小程序提供几种结算周期? T+1是什么意思?

小程序提供4种固定的阶梯周期选择:T1、T7、T14、T28;其中T代表“Today”&#xff0c;今天的收入会在1(第2天)后自 动结算至银行卡上。

提高国内访问GitHub速度的9种方案~

GitHub 镜像访问GitHub文件加速Github 加速下载加速你的 Github谷歌浏览器 GitHub 加速插件(推荐)GitHub raw 加速GitHub Jsdelivr通过 Gitee 中转 fork 仓库下载通过修改 HOSTS 文件进行加速为什么 github 下载速度这么慢&#xff1f;如何提高 github 的下载速度&#xff1f;…

计算机术语翻译在线,计算机术语翻译

小编为大家整理了计算机术语翻译&#xff0c;希望对你有帮助哦!计算机术语翻译&#xff1a;so-dimm(small outline dual in-line memory modules&#xff0c;小型双重内嵌式内存模块)spd(serial presence detect&#xff0c;串行存在检查)sram(static random access memory&…

python数据可视化源码_Python数据分析:基于Plotly的动态可视化绘图 随书源码[101MB]...

随着信息技术的发展和硬件设备成本的降低&#xff0c;当今的互联网存在海量的数据&#xff0c;要想快速从这些数据中获取更多有效的信息&#xff0c;数据可视化是重要的一环。对于Python语言来说&#xff0c;比较传统的数据可视化模块是Matplotlib&#xff0c;但它存在不够美观…

JS中原型链的理解

在谈原型链之前&#xff0c;我们首先要了解自定义函数与 Function 之间是什么关系&#xff0c;而构造函数、原型和实例之间又存在什么千丝万缕的关系呢&#xff1f;其实&#xff0c;所有的函数都是 Function 的实例。在构造函数上都有一个原型属性 prototype&#xff0c;该属性…

返利是什么意思

就是将钱返给你。 按消费金额的10%返利&#xff1a; 如果你消费1000元&#xff0c;返给你100010%100元&#xff1b;

计算机系统基础:总线结构知识笔记

1、总线定义 计算机和设备之间传输信息的公共数据通道&#xff0c;是连接计算机硬件内多种设备的通信线路。它实现了总线上所有设备共享。 2、总线的分类 2.1 数据总线&#xff08;DB&#xff09; 用来传递数据信息&#xff0c;双向的。数据总线的宽度决定了CPU和计算机奇特设备…

html引用c 变量,Y.A.K.E

记录一次C项目改造中定义全局变量的操作.我对C/c不太熟悉,在修改别人项目的时候,想弄个文件,专门存放全局变量.然后各种不对.xxx previously defined here错误 或者 error: redefinition of xxx或者initialized and declared extern反正各种问题.其实根本原因就是重复引用导致的…

linux python开发环境_如何在Linux系统中搭建Python编程环境

1 在大多数的Linux系统中&#xff0c;基本上都默认安装了Python&#xff0c;也就是说&#xff0c;在Linux的系统中基本上是不需要安装什么软件&#xff0c;就可以使用Python。 下面以ubuntu操作系统为例&#xff0c;看看如何在Linux操作系统中搭建Python编程环境。2 检查Ubuntu…

CentOS 搭建 LAMP服务器

CentOS 7.0默认使用的是firewall作为防火墙&#xff0c;这里改为iptables防火墙。 1、关闭firewall&#xff1a; systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 2、安装iptables防火墙 yum install iptables-ser…