APP架构思考

整体架构

一般都是先有PC互联网,再有移动互联网。当移动互联网开始发展的时候,PC端基本已经相当成熟了。因此,一开始移动互联网都是作为PC端的补充而存在的,架构也是简单而直接。这么做短期内能快速落地,但是随着业务的发展,就需要进行架构改造,这是当前很大一部分的现状。

单体应用.jpg

这里最重要的一点是给APP客户端一个独立的后台,独立开发,独立部署,从架构层面彻底摆脱PC思维无线化。

整体架构.png
  • 企业一般先有PC端,再推APP端。应当根据移动自身的特点进行架构的设计,而不是以模块叠加的方式加到现有的PC端体系之中
  • APP要有自己独立的服务端,图中“无线网关”部分,跟PC的服务端进行良好的隔离,实现逻辑和物理层面的解耦。
  • 客户端和“无线网关”之间的通信推荐用HTTPS,目前苹果在推全网HTTPS化,这是趋势。无线安全问题有越来越热的趋势。
  • “无线网关”部分对APP来讲是后台,对于后台系统来讲是前端,目前的开发语言一般是Java或者PHP。在组织结构上,这部分人员应该划入APP开发团队,这样能够保证移动开发的完整性。图中虚线框部分。
  • 后台服务可以统一成一套,让APP和PC共用。
  • 通用逻辑,比如安全、日志、监控、缓存等等,能够从客户端剥离的,尽量都放到“无线网关”部分。---能后台实现的,就不要放客户端。客户端要写3遍,后台只要写一遍,并且可以随时升级打补丁。
  • 路由层要做好流量控制,实现“灰度发布”,更好地控制风险
  • 适配层要将后台服务各种不同的接口统一为一种,HTTPS+JSON,方便客户端调用。同时,可以考虑对多个SOA服务做聚合,缓存,业务逻辑,对APP提供粗粒度的数据,减少APP网络请求的次数,提升性能。
  • 从落地实施上,整个开发也可以分为无线开发,后台开发两部分。先定好SOA的接口,无线开发(客户端+无线网关)就可以按照自己的进度进行,不需要依赖后台服务是否可用。遇到后台服务还没有好的情况,可以将测试数据在无线网关,在内部测试服务器上部署。无线端提前ok,对后台服务的开发和测试也是有利的。

客户端架构

这一层是对APP的横向拆分,根据业务的特点,分为Native,H5,SDK三块。

客户端架构.jpg
  • H5目前已经比较普及。一个原则是能用H5做的,就不需要用Native来实现了。比如一些具体的业务,一些信息的介绍等等。
  • SDK化也是简化APP架构的一个比较好的方式。包含UI的,比如支付收银台;不包含UI的,比如加解密,都是可以的。一开始出现的原因可能是公司之间或者部门之间合作,进行敏感信息隐藏。目前可以作为一种简化架构,提高模块复用的良好方式。比如登录注册模块,第三方登录,分享,支付,加密加签等等都可以考虑做成SDK插件。
  • SDK化和SOA服务化的主要区别是解决思路的不同。SDK化是模块的横向切分,进行部门间、公司间协作。SOA服务化的思路是独立、单一、解耦、提高复用,最好是在分层之后再按模块分类。因为不同的层,分类的标准都有可能不同。

iOS Native 架构

在多年的实际APP开发中,听到报问题最多的两点是

  1. 视觉图还没有给
  2. API接口没数据

根据这两点,将传统的APP分为三层。界面层只做界面相关的事情,和UI一起开发;数据层专门负责API接口的实现,和APP后台一起开发。业务逻辑层主要用来实现业务规则,做到与数据和界面无关,尽量提高复用度。

当然,考虑将逻辑层和数据层独立出来的原因,是随着APP规模的扩大,为了达到方便部门间合作,模块复用,敏感数据隔离等目的。

这里的思路主要有以下几点

  • 三层模型,切出尽量薄的界面层和数据层,主动应变
  • SOA服务化,进行解耦,提高复用
  • framework化,从物理上实现模块间的隔离
iOS Native架构.jpg

界面层

  • 用Storyboard为主开发界面
  • 用imageset管理图片
  • 按页面流程划分模块,分到不同的文件夹中,大小要适中
  • 一个模块一个Storyboard,一个imageSet;Storyboard不要超过7到10个Scene。就算是只有一个Scene也可以单独放置在一个Storyboard中。
  • 一个Scene,这个就是View,对应一个ViewModel, 一个ViewController。采用MVVM思想,给ViewController减负。
  • 将AppDelegate中的一些实现代码下沉到逻辑层,AppDelegate只作为程序生命周期的调度者,不做具体的事情,实现AppDelegate的减负。
  • 规范组件是View,考虑复用;

组合模式,考虑用xib实现,所见即所得
继承模式,从系统的控件一级继承,用代码实现
远期考虑用framework封装,方便在多项目中复用

  • 多用Storyboard和xib,少用代码,除规范组件之外,其他的不考虑复用。应对变化是最优先考虑。
  • 顶级目录用workspace,每个项目用一个project来表示,采用集中化的管理模式

逻辑层

  • 整个逻辑层可以封装成logic.framework,方便隔离,多项目复用
  • 按照业务进行模块划分
  • 一些跟具体业务无关的内容按照工具箱的思路进行封装,比如各种日期转换工具
  • 按照SOA思路,每个模块都封装独立的framework

数据层

  • 整个数据层可以封装成data.framework,方便隔离,多项目复用
  • 按照数据存储方式进行模块划分
  • 按照SOA思路,每个模块都封装独立的framework

技术选择

  • 开发语言选择Swift,放弃Object-C
  • 第三方库管理工具选择Carthage,放弃Pods
  • SDK化工具选择framework,放弃.a , .bundle方式

兼容性

  • 优先向上兼容,其次向下兼容
  • 良好支持两个版本,主流只需要支持3个版本

当前最低支持iOS8或者iOS9;放弃iOS7;为即将到来的iOS10提前做好准备

  • 硬件支持2个大版本

当前支持iPhone5,iPhone5S,iPhone5C,iPhone6,iPhone6S,iPhone6Plus,iPhone6S Plus;放弃对iPhone4,iPhone4S的支持;等iPhone7出来之后,逐步减少对iPhone5系列的支持
从屏幕尺寸来说,当前支持4英寸,4.7英寸,5.5英寸;放弃对3.5英寸屏支持。设计可以4.7英寸为主,用autolayout,进行屏幕尺寸适配

  • 跟上苹果的节奏,每年进行一次重构,将软件和硬件的支持逐步升级。

碎片化控制是iOS开发一项重要特色
优先支持新特性,在AppStore中有加分项
控制warning数在个位数之内,及时进行系统API的替换

  • 在时间上,根据苹果自身的发布时间,提前3个月开始进行
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容