您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > APP

APP分层架构设计随想

时间:2020-07-22 10:32:03  来源:  作者:
互联网分层架构的本质,是数据的移动。

互联网分层架构演进的核心原则:让上游更高效的获取与处理数据(复用),让下游能屏蔽数据的获取细节(封装)。

App分层架构设计随想
不管数据怎么移动,最终都会汇聚到客户端。服务端的分层架构设计已经讲了很多,客户端的分层架构设计应该怎么玩呢,服务端的分层架构设计是否有能够借鉴的地方呢,今天和大家简单聊一聊。

先来看小诗一首:

Android猿》

曾经

所有代码

都被写在Activity里

几乎

没有代码

可以复用

每当

看到Activity里

2000行的函数

我就

想要离职

上面,是团队中一个文艺Android程序员的自述,表达的核心观点是:几乎所有代码都写在了Activity里(不理解Activity的,暂且认为是MVC里的view层),完全没有封装和复用。

更具体的例子,微信登录的界面,点击登录按钮,此时可能要执行:

验证用户名密码
拉取好友列表
拉取用户信息
拉取好友信息
拉取离线消息
如果把这些都写在微信“登录Activity”里,会发现一些很严重的问题:

登录整个逻辑不能复用
登录过程中的每个子逻辑也无法复用
假设产品里有一个“离线后重新登录”的功能,步骤与登录相同,就需要把上述在“重新登录Activity”里代码复制一遍。

又假设产品里有一个地方需要“拉取用户信息”,也将把“登录Activity”里“拉取用户信息”的代码复制一遍。

封装复用的道理谁都懂,拷贝代码的坏处也谁都明白,那为什么大家还这么做,让代码越来越“腐烂”呢,根据个人经验,主要是这么几点原因:

早期业务压力大,APP是少数几个同学的,没有提前做规划
后期代码越来越臃肿,不敢动,一动怕影响功能,怕出问题,怕担责任
项目中,是以功能界面进行编码划分的,一个同学会同时负责MVC三部分编码,加之项目压力又大,既然是一个人写,就没必要分层了,搞多了调用反而麻烦
项目中,有个需求好像之前做过,代码一看,写在Activity里,纠结。抽象成函数?还得改别人的代码,算了,还是拷贝一份吧

不管历史原因,项目原因,个人的原因,大家都知道分层抽象,代码复用是正确的,那有什么方案能够将这个分层抽象落地,从后端的分层架构中是否有可借鉴的地方呢?

APP分层架构设计随想
一个典型业务系统的后端架构如上:

web-server层调用RPC接口,从service层获取数据,拼装html/json,完成数据展现
biz-service/data-service向上游提供可复用的原子接口,实现业务逻辑,并层通过DAO层,从db层获取数据
db层提供数据
APP端的分层架构不是非常相似么?还是以登录业务为例:

APP分层架构设计随想
登录Activity有两个按钮,一个确认按钮,一个取消按钮,这两个按钮的点击,分别只能调用一个函数:
on_LoginConfirm_Click

on_LoginCancel_Click

这里相当于展现层,除了交互与展现,View层只能调用这两个函数

这两个函数的实现,是通过若干可复用的“原子业务逻辑”函数实现的
验证用户名密码: bool verifyPass(name, pass)

拉取好友列表: List<uid>getFriendList(uid)

拉取用户信息: Use rgetUserInfo(uid)

拉取好友信息: List<User>getUserInfo(List<f_uid>)

拉取离线消息: List<Msg>getOfflineMst(uid)

这相当于服务层,实现业务逻辑,提供封装和复用

“原子业务逻辑”函数执行的过程中,需要访问数据,数据的获取又分为两类:
同步获取:通过文件,内存,本地数据库获取

异步获取:从server获取,往往通过回调实现

这里相当于数据层,向上游屏蔽数据获取的复杂性,分别用不同的Proxy去实现

在这种结构下:

展现层非常轻,只调用一个函数,用于展现数据
“原子业务逻辑”可以复用,不同的展现层Activity可以随意组合,实现不同的业务逻辑,用于处理数据
Proxy对上游屏蔽的数据获取的复杂性,向上游提供数据获取接口,用于获取数据
互联网分层的架构的本质,是数据的移动,分层架构封装复用的思想,前后端有共通的地方。明明知道要封装和复用,为何实现起来如此的困难呢?

Activity里一坨坨复杂的代码,也是你曾经的痛么?

来源公众号:架构师之路


Tags:APP 分层架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
互联网分层架构的本质,是数据的移动。 互联网分层架构演进的核心原则:让上游更高效的获取与处理数据(复用),让下游能屏蔽数据的获取细节(封装)。 APP分层架构设计随想 不管数据怎...【详细内容】
2020-07-22  Tags: APP 分层架构  点击:(91)  评论:(0)  加入收藏
▌简易百科推荐
  1、明确产品的需求分析+功能  这是最基本的也是第一步,我们要明确自己或者客户真的想要开发一款app应用,其次就要了解到底要开发什么功能什么类别和种类的app应用。所...【详细内容】
2021-12-27  木子科技    Tags:App   点击:(3)  评论:(0)  加入收藏
前言目前,即时通讯在app中逐渐成了不可或缺的功能,尤其是在疫情期间,音视频会议功能更是火了一把,但是想自己开发即时通讯功能,却一点都不简单,如果用原生开发的话,那么Android、iO...【详细内容】
2021-07-29  中控易动    Tags:APP   点击:(104)  评论:(0)  加入收藏
本篇博文将会提供一个关于如何使用WebRTC建立一个视频会议App的教程。我们不会将其设计的太复杂,它将会是一个简单的一对一视频会议App,并且仅仅使用了WebRTC APIs和一些其他...【详细内容】
2021-07-29  易简视源云会议    Tags:视频会议App   点击:(113)  评论:(0)  加入收藏
开发一款app需要多少钱?这是一个比较笼统的问题,没有确切的需求,拥有不同技术经验的团队往往报价都各不相同,因为不知道开发需求,所以无法给出一个准确的价格。因此,想知道app开发...【详细内容】
2021-07-13  hey衡道    Tags:app   点击:(79)  评论:(0)  加入收藏
Hybrid APP指的是半原生半Web的混合类App。需要下载安装,看上去类似Native App,但只有很少的UI Web View,访问的内容是 Web 。 原生是Native APP,H5就是Web App在Hybrid 当中,如...【详细内容】
2021-04-28  扣丁学堂  今日头条  Tags:APP页面   点击:(289)  评论:(0)  加入收藏
介绍MIP(Mobile Instant Pages - 移动网页加速器),是一套应用于移动网页的开放性技术标准。通过提供 MIP-HTML 规范、MIP-JS 运行环境以及 MIP-Cache 页面缓存系统,实现移动网页...【详细内容】
2021-04-12  爱分享Coder  今日头条  Tags:WebApp   点击:(309)  评论:(0)  加入收藏
在开发直播APP时,核心要素和基本要素是稳定性,一般各大服务商都有提供demo,并且可以免费测试的,测试可以初步评估下稳定性,看看视频流畅度如何,卡顿是不是很频繁,延时效果怎么样,视...【详细内容】
2021-03-19      Tags:直播APP   点击:(292)  评论:(0)  加入收藏
TOKEN作为用户身份凭证并不能保证数据安全,别人通过抓包等方式很容易拿到TOKEN,带上TOKEN请求我们的API接口就能获取数据;其实换一个角度想:我们只需保证即使TOKEN被别人冒用,也...【详细内容】
2021-02-18      Tags:APP,API   点击:(229)  评论:(0)  加入收藏
在当今移动互联网盛行的时代,网络的形态除了有线连接,还有2G/3G/4G/5G/WiFi等多种手机网络连接方式。不同的协议、不同的制式、不同的速率,使移动应用运行的场景更加丰富。目前...【详细内容】
2021-02-05      Tags:APP   点击:(201)  评论:(0)  加入收藏
虽然目前许多企业都进行了长沙APP开发,开始了移动互联网转型之路,但由于其中绝大部分企业都属于传统行业,对APP应用了解并不多,故而对开发工作也不是很清楚。为了大家能更好的了...【详细内容】
2021-02-01      Tags:APP应用   点击:(214)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条