通俗易懂的Android应用架构思想
算算日子,工作刚好三年了。这篇开始,鄙人就要向着各种以前想起来就头大的方向努力前进了。作为在Android应用层搬砖多年的民工,首篇我想谈谈自己对架构思想的一些看法。如有不妥,还请拍砖。
盖楼的故事(虚构)
有一块地,两个区域,开发商分别让两个包工头负责开发。
包工头A办事干净利落,甩开膀子就开工了。为了省钱雇了一个全能的工人,他既要去采购盖房的材料,又要用这些材料盖房子。起初底层屋子结构简单,还能应付得来,到了后面复杂的设计需求时,忙的不可开交,经常精疲力尽,阻断了盖房子的进程,使得老板很是不开心,偶尔让他改个屋子结构,他要把整层楼都推到才能实现,严重影响了工期。画的图纸都是一次性的,不能重用,耗时又耗钱,开发商整天吹胡子瞪眼的跟在屁股后面催。
包工头B拿到开发商方案后,先召集小弟开了个会,确定了所有楼层的样式,并把它们拆分成独立的模块。按照模块划分给了各个负责人,有制定楼层样式的,有专门负责资源提供的,有负责运送资源的,有按照预定方案实施的等等。花了大半个月将所有任务都分配完毕,开始施工。虽然人雇佣的有点多,前面的时间也耽误了大半个月,但是一开工很快就赶上了隔壁楼。emmm,开发商喜笑颜开,点点头,这个钱花的划算,完事后以后就用包工头B了。
不久后,两块地都完工了。这时质检开始了,令人头疼的A区域,有个小毛病就要拆掉一大片地方去改造,有的地方改好了却又影响了其它地方,而反观B区域,专人负责只要改有问题的地方就好了。
后来,包工头A游走在各个小开发商,工资又低又累,而包工头B已经走上了人生巅峰。(哈哈,终结)
包工头B的巅峰秘籍
我们再来回顾一下包工头B的盖楼经过。
-
接到项目,没有立即开发,开会整理需求;
-
按需求、职能划分模块,并由对应的人员负责;
-
各功能模块的负责人扁平化管理,没有相互掣肘;
同样的,我们App的开发也是一样的道理,不能像包工头A一样把所有的任务都交给Activity去做。我们要像包工头B一样分层去创建App。大家可以了解一下clean Architecture,这里将App应用分为三层,内-中-外,然后由4个管理者分别去管理他们。
分层的准则:
由外到内抽象内层不了解层,外层依赖内层
分工明确,相互独立
先来解释一下第一条,以往我们开发App都是先从界面开始,然后最终到业务逻辑。现在要反过来,接到需求,要先明确实体是什么
(举个例子,比如登录功能,它所描述的实体就是用户User
),然后它有哪些行为(比如登陆,登出userCase
)。最后再到具体功能实现。
内层不了解外层,还是拿登录来说,在内层只需要知道用户有登录以及登出的行为就可以了,至于它是如何进行这些行为,内层就不需要知道了,但是反过来外层要实现内层的行为就要知道内层有哪些行为于是便产生了依赖关系。内层能独立存在,而外层必须依赖内层。
分工明确,相互独立,讲的是各模块功能独立存在,就比如登录,和注册功能是相互独立的,各司其职,不能越俎代庖。
4个管理者
domain:定义抽象实体,核心业务逻辑,以及数据输出接口。此层为纯java代码,建议直接创建java module。data:数据管理,分为本地的存储(sqlLite,sharedpreferences),以及服务端Api。
device:与Android底层相关,如通知,蓝牙,传感器等等。
app:我们最熟悉的层级,内部可以根据各自的喜好选择MVP,以及MVVM模式来实现UI界面。
App开发的流程
domain层中定义抽象实体,设定其对应的行为。data层中,给予数据支持
device层,按需开发
app层,这里以MVP为例,首先在presenter中实现domain层定义的所有行为,data层和device层协助。最后实现UI界面,完成功能。
原文发布时间为:2018-06-22
本文作者:bear~
本文来自云栖社区合作伙伴“安卓巴士Android开发者门户”,了解相关信息可以关注“安卓巴士Android开发者门户”。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
redis4.0、codis、阿里云redis 3种redis集群对比分析
redis4.0、codis、阿里云redis 3种redis集群对比分析 本文对redis4.0版本的cluster,codis,以及阿里云redis 3种集群进行了对比分析。 1、架构对比 1.1、redis 4.0 cluster redis 4.0版本的集群是去中心化的结构,集群元数据信息分布在每个节点上,主备切换依赖于多个节点协商选主。 redis 提供了redis-trib 工具做部署集群及运维等操作。 客户端访问散列的db节点需依赖smart client,也就是客户端需要对redis返回的节点信息做判断选择路由等操作。例如客户端请求一个节点,如果所请求的key不在该节点上,客户端需要判断返回的move或ask等指令,重定向请求到对应的节点。 1.2、codis codis由3大组件构成: codis-server : 修改过源码的redis, 支持slot,扩容迁移等 codis-proxy : 支持多线程,go语言实现的内核 codis Dashboard : 集群管理工具 提供web图形界面管理集群。 集群元数据存在在zookeeper或etcd。 提供独立的组件c...
- 下一篇
IT人必看!2018年上半年云栖大会300份干货PPT免费开放!最前沿的技术都在这了!
如今,提起“云栖大会”这个名词,每位开发者一定都不会感到陌生,从09年的地方性站长会议,到15年正式定名,落户云栖小镇,这一阿里巴巴集团主办的开发者盛会如今已经成为全球云计算领域的头等大事。云栖大会不仅仅是一个简单的会议,而是覆盖创新、创业、大数据的广阔平台,折射出一个产业蓬勃兴起的一面。技术与服务并重,应用与生态共建,可以说,云栖大会即是云计算行业发展的风向标。 汇聚DT时代最强大脑,描绘云计算发展趋势和蓝图,展现云计算、大数据、人工智能蓬勃发展的技术生态全景,2018年,云栖大会城市峰会已陆续在深圳、南京、武汉、上海四座城市举办。接下来,就让我们回顾下2018上半年最精彩的云计算盛会,来看看,2018的云计算领域,都为我们带来了些什么: 下一站:9月19-22日杭州云栖大会,门票火热抢购中,立即购票 深圳峰会 3.28-3.29 作
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Hadoop3单机部署,实现最简伪集群