Android应用架构思想分析

 更新时间:2018年06月27日 08:43:22   投稿:laozhang  
本篇文章是一个Android应用开发的老程序员写的关于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界面,完成功能。

相关文章

  • Android中Activity的四种启动模式和onNewIntent()

    Android中Activity的四种启动模式和onNewIntent()

    android 中activity的启动模式分为四种,(standard、singleTop、singTask、singleInstance),本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-08-08
  • 往Android系统中添加服务的方法教程

    往Android系统中添加服务的方法教程

    最近因为平台升级,需要在系统中添加一些服务,所以将整个过程总结一下,下面这篇文章主要给大家介绍了往Android系统中添加服务的方法教程,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-05-05
  • Android编程之客户端通过socket与服务器通信的方法

    Android编程之客户端通过socket与服务器通信的方法

    这篇文章主要介绍了Android编程之客户端通过socket与服务器通信的方法,结合实例形式分析了Android基于socket通讯的具体步骤与相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Android View背景选择器编写技巧

    Android View背景选择器编写技巧

    本文主要介绍了Android View背景选择器编写技巧,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 一文理解Android系统中强指针的实现

    一文理解Android系统中强指针的实现

    因为Android中很多地方代码是用C++编写,为了能够保证C++中指针能够被正确的释放,于是Android引入了其实在C++中已经有的智能指针技术
    2021-10-10
  • Android实现圆角弹框功能

    Android实现圆角弹框功能

    这篇文章主要介绍了Android实现圆角弹框功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • android:layout_gravity和android:gravity的区别

    android:layout_gravity和android:gravity的区别

    本篇文章主要介绍了android中giavity和layout_gravity的区别。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • Android 实现获取手机里面的所有图片详解及实例

    Android 实现获取手机里面的所有图片详解及实例

    这篇文章主要介绍了Android 实现获取手机里面的所有图片详解及实例的相关资料,需要的朋友可以参考下
    2017-05-05
  • Android实现粒子漩涡动画

    Android实现粒子漩涡动画

    粒子动画经常用于大画幅的渲染效果,实际上难度并不高,但是在使用粒子动画时,必须要遵循的一些要素,起点,矢量速度和符合运动学公式等,文中有详细的代码示例供大家参考,具有一定的参考价值,需要的朋友可以参考下
    2024-01-01
  • Android学习笔记--通过Application传递数据代码示例

    Android学习笔记--通过Application传递数据代码示例

    使用Application传递数据步骤如下:创建新class,取名MyApp,继承android.app.Application父类,并在MyApp中定义需要保存的属性
    2013-06-06

最新评论