从历史开始说起
经历的公司,没有一家的iOS架构是一样的,而且相差甚远,但是总体的脉络是一样的,总体的流程也是一样的。
但是最近1年内,有个mvvm + rac + rooter 的组合,和以前的写法还是很大不一样,最大的感触就是代码写的多了,架构更复杂了,但是给其他人讲解架构的时候,变得简单了。
从js 引入过来的东西不是每个都好的反而弄巧成拙。所以我自己终结了一套mini 简单架构,各种扩展看各位项目中的具体实践了。
先来个简单粗暴的
一般客户端和前端的人,都能看到,一般技术的开发,也都能看懂,从服务端请求数据,到客户端展示。
为什么大部分的架构图都很复杂,因为技术颗粒度不一样。
1 网络
一般iOS oc 开发afn,头些年还是asi ,可惜不更新了,网络上有一个性能对比,asi 碾压afn。
个人或者企业都会对afn 进行二次封装,以对上层的数据逻辑更好的使用,其实现在的afn 已经很方便了。不过,架不住每个公司服务端的设计不一样,才有千变万化的数据请求 header 参数。
2 数据逻辑
数据逻辑的代码多少,完全看网络层的封装是不是合理,我个人认为,网络层的封装评判标准 就是数据逻辑层用的是不是简洁。
这一点,我认为还是友好 的api + 不嵌入业务的网络层+ 尽量少的设置参数 = 高效的开发。
这里就涉及到两个架构 mvc 和mvvm。不管拿一个,如果一个网络层OK ,controller 里面和viewModel 里面都会简洁明了。
到这里,可以看出,架构的好坏不在于模式,那些是工具,还是在于人。
还没有到业务
扩展一下,非逻辑的业务也是容易挪用的,更是不需要所谓组件化的部分,就是这些
1 共有模块
包括 登陆注册,分享,广告,tabbar,弹窗自定义,下拉上拉,特别动画,图片下载,时间处理 ,数据库等等,甚至是自己写的什么什么黑科技,这样的和业务仅仅是用的情况,统称共有模块。--这里我自己的意见也是和组件化本质的不一样,就是利用pod 和oc 本质有的.h 文件,所以这也是我一直不同意网上大部分组件化的方案 如图
因为这张图中的混乱是人为的架构混乱,让这个人写组件化,一样会写的如此。
2 数据解析
这个网上的第三方和自己写的都用,最关键的崩溃就是数据为空,所以,避免了这个,基本都OK yymodel, mjmodel,都是基于runtime 的属性索引方式方法
3 数据监听
app 数据收集,这个在大数据,人工智能的运起的今天,变成了单独的业务,甚至有产品专门负责。早起的友盟,现在国外的fa,可能后期还有更多,但是千万不要多个监听组件在一个app 里面,导致两个数据的收集都不准确,最后自己都不知道哪个平台是准确的。
4 分类
这个最好多人开发的时候,放到一个文件夹,避免重复分类的建立。把iOS 开发提高效率的另外的途径就是建立一套自己一直用的分类。
.....
当然还可以有很多,但是这个最好自己的都看一边,用的时候,不用重复的写。
特别业务
这个根据公司的不同,可能就开始各种变化,但是主干的确定后,不要以公司的特别产品需求而把项目的架构边的复杂。局部的复杂和全局的简洁,这个就变成了开发的拿捏,往往这个地方是最容易出问题的地方,那局部的简洁说全局的合理。
比如列表的封装,列表本身就是一个不利于封装的控件,这个是我个人的意见,封装的成了局部利用方便,全局的列表会设置一堆不必要,稳定不可查的参数。坑就这么来了。
网络底层嵌套业务,一旦需求更新,底层不适应上层业务, 更改底层,不是每个人都敢于背锅的。
这也是面试里面没有办法面试出来,所以后期期待有解决方案
其他
剩下的我个人终结 是痒点更新
日志打印
可有可无,但是如果有个很好的ui 层级打印,调用堆栈打印,也是不错的
调试的工具千千万,选一个适合你的就好。
个人比较喜欢这个
https://github.com/johnno1962/injectionforxcode
如果嵌入项目,看自己爱好。
个人发挥空间
每个人的方向爱好不一样,不能因为项目限制个人想法,建立分支,自己搞事情,这个还是一个美好的解决方案,比如 weex\rn 、rac、 js 相关的东西。还有自己写的第三方pod。甚至自己写的服务端,拿客户端练习,想象无极限....
本地数据
这个犹豫涉及到数据存储,这就涉及到加密的。加密和攻防 也是iOS开发的方向,有兴趣的可以的
小结
虽然写的比较意识流,但是看到现在网上很多倡导的架构,背离了 一个方向,就是简洁和去中心。
去中心是区块链技术的思想,项目开发中,也可以秉承这个思想。
单个app 如果就访问使用压力,永远是1对1 ,这也是移动客户端开发的特点,所以,每个架构都不涉及到访问压力,和设计最优。
但是如果你的公司是多个app,模块高度复用,那么你的代码个性化和复用性就是你考虑的重点,比如上图,一个公司虽然app 里面有多个是游戏,但是,如果你公司的应用是多个,那么组件化不会让你开发效率提高,而是你的模块封装 易pod 易copy。这就是判断iOS 一个项目中你写的组建是否好的标准之一。
还有。
代码量,杀鸡用牛刀,在客户端还是很多地方看得到的,也是别人吐槽的点。