关于本文介绍的小架构我做了一个demo,地址如下:
https://github.com/xiaxveliang/Android_APPArchitecture_Demo

##########################正文开始了###############################

从2011年到现在,做了几年的Android应用与Android平台上Opengl es应用开发,下面是关于Android APP开发架构的一些思考:

构建框架的最终目的是增强项目代码的可读性 ,维护性 和方便测试 ,如果背离了这个初衷,为了使用而使用,最终是得不偿失的。

从根本上来讲,要解决上述的三个问题,核心思想无非两种:一个是分层 ,一个是模块化 。两个方法最终要实现的就是解耦,分层讲的是纵向层面上的解耦,模块化则是横向上的解耦。

在写Android APP相关代码时,如果“客户端只做数据展示,不做用户交互逻辑”这样的APP,基本Bug都很少。思考其原因,可能是这样的APP代码逻辑简单。

我们知道 代码越简单、易读,越不易出bug,但APP功能越来越复杂,代码量越来越多,好像随之代码也会越来越复杂。

一、那我们能不能设计一个,只做数据展示,不做用户交互的APP架构呢?

上边的截图,是关于 只做数据展示,不做用户交互的APP架构思考。

朋友们可能已经注意到,这是典型的MVC。
这里Model层来管理数据,并继承Observable,而每一个controller(Activity)均实现Observer。这样若某一个Activity需要获取某一种类型Model数据时,只要在其对应Model中注册观察者。

二、下边是关于上图的简单介绍:

  • (1)、用户触发登录——>帐号密码请求服务器——>服务端返回登录数据——>登录model(登录model存登录用户数据)——>登录model通知“登录Controller”——>更新登录页面UI
    ——>登录model(登录model存登录用户数据)——>登录model通知“更新用户详情Controller”——>更新用户详情页面UI
  • (2)、这里model为被观察者,controller可根据需要在相应model进行观察者注册,这样model层中对应数据发生变化时,对应的controller便可收到页面更新的通知,完成页面更新。

三、那只做数据展示,不做用户交互又是怎么回事呢?

  • (1)、这里通过Model把用户操作转化为数据更新( 用户操作——>Model——>回调所有的观察者Observer(controller)——>更新UI )
  • (2) 、另一个好处是,可以用这套回调机制,替换Android中的广播来传递消息(单进程中)
    所有数据的变化,均通知对应的数据Model,通过Model回调到对应的Activity,Activity再更新UI

四、目前这种小架构是可以满足一般业务量APP需求的,那随着业务量的增大,该如何设计APP框架呢

以上的框架图是可以满足一般的Android APP业务需求的。但如果客户端功能越来越复杂,可按业务分为不同的功能模块,模块内部使用以上介绍的框架和通信方式。
模块内部,采用观察者回调进行通信;模块之间采用广播(或者其他进程间通信方式)进行通信

这里以广播举例:

  • 1、主模块内部采用事件回调进行通信
  • 2、主模块使用广播将事件传递给子模块
  • 3、每个子模块内部采用事件回调进行通信

五、与MVP MVC的比较

无用户UI操作介入时小架构MVC之间的关系如下


正好与MVP的不谋而合,MVP三者的关系如下:

关于MVP的文章,可参考Android MVC MVP MVVM

用户UI操作介入后小架构MVC之间的关系如下

传统的MVC模型如下:

关于MVC的文章,可参考Android MVC MVP MVVM

PS: 由此可见,小框架与传统的MVC又也有所不同,算是MVC的一个变种类似于MVP

========== THE END ==========

您对“我的文章”有任何疑问,可用微信扫描以下“二维码”向我提问!

========== THE END ==========

如果文章对您有帮助,请扫描以下二维码支持我!

Android APP架构思考相关推荐

  1. Android APP架构设计——MVP的使用示例

    0. 前言 为了更好地进行移动端架构设计,我们最常用的就是MVC.MVP和MVVM,作为三个最耳熟能详的三大架构,应用可谓非常广泛.对于这三种架构设计以及优缺点已经在Android APP架构设计-- ...

  2. Android APP架构心得

    前言 从JavaEE转到Android开发也2年多了,开发的项目也有4,5个了(公司项目),其中有3个项目前期都是自己独立开发,从一开始的毫无架构到现在对如何架构也有一点心得,所以在此分享出来,大家一 ...

  3. Android App架构设计

    前言 Web的架构经过多年的发展已经非常成熟了,我们常用的SSM,SSH等等,架构都非常标准.个人认为,Web服务逻辑比较清晰,目的明确,流程也相对固定,从服务器收到请求开始,经过一系列的的拦截器,过 ...

  4. Android App 架构设计相关资料汇总

    1. 前言 只要有1,2年工作经验的程序员,多多少少都会接触到架构东西.可能平时工作中不一定会有机会从0到1完完全全自己去设计一套架构出来,但是如果想成为高级工程师,技术专家,架构师--尽早接触架构方 ...

  5. Android App架构指南

    该指南针的目标人群是已经知道如何建构简单的app,并且希望了解构建健壮的产品级app的最佳实践和推荐架构. app开发者面临的难题 不同于大部分的传统桌面应用只有一个入口,并且作为一个整体的进程运行, ...

  6. 浅谈Android App架构

    一.什么是架构 什么是架构,我最初的理解,架构就是通过降低偶合性,提高安全性和扩展性,达到方便对软件进行维护的一套行之有效的分层思想.在我看来架构最主要的就是降低偶合性和提高扩展性,我们平常对于客户端 ...

  7. android快速搭建界面,怎么样能快速搭建一个Android APP的界面和框架?

    繁花如伊 自己从零开始快速搭建Android app架构简单的看下这三个架构模式:MVC:Model-View-Controller,经典模式,很容易理解,主要缺点有两个:View对Model的依赖, ...

  8. Android架构思考(模块化、多进程)

    Android架构思考(模块化.多进程) Dec 28, 2016| Android | 4777 Hits 15条评论 关于模块化(组件化)这个问题,我想每个开发者可能都认真的思考过.随着项目的开发 ...

  9. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    本文转载自https://www.tianmaying.com/tutorial/AndroidMVC,原文作者周鸿博. 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开 ...

最新文章

  1. spark 序列化错误 集群提交时_【问题解决】本地提交任务到Spark集群报错:Initial job has not accepted any resources...
  2. 在docker中haproxy的安装以及mysql的负载均衡配置
  3. R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据
  4. 新车模、新舵机、新体验
  5. 基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作
  6. 如何去掉文章里的非关键词c++_B2B/B2C网站:文章标题如何写才能促进搜索排名...
  7. 综合技术 --web.xml
  8. vCenter如何逃离Windows的坑(转)
  9. pytorch梯度累积
  10. php !$rs-gt;bof and !$rs-gt;eof,关于rs.bof rs.eof的一些解释,请大家帮我完善一下,谢谢...
  11. tuple操作、dict、其他常用操作
  12. STM32F4 使用 JFlash 加密后无法再擦除了
  13. vue电商后台管理项目总结
  14. 计算机课程总结word,大学生的计算机课程总结word.docx
  15. python 去掉标点、数字、特殊符号_python中怎么去掉标点符号
  16. 反垃圾邮件技术之密径追踪
  17. 无法获取链接服务器 (null) 的 OLE DB 访问接口 SQLNCLI10 的架构行集
  18. SpringBoot ActiveMQ 整合使用
  19. C语言学习笔记---8C语言中的英文字符
  20. C语言实现任意函数求不定积分

热门文章

  1. java 写入文件流_Java实现文件写入——IO流
  2. 谈tabulator动态增删改、填充数据以及清空数据
  3. Golang DES加解密
  4. 计算机硕士全国联考英语考试,在职攻读硕士学位全国联考英语考试大纲有这五大内容需要注意...
  5. 【阮一峰博客学习记录1】追踪用户点击
  6. 数组:左右两边数组的和相等
  7. 学生用计算机该如何关闭,学生晚上回宿舍时,其在实验室的计算机主机应关闭,显示器一般不用关闭。()...
  8. 【Unity新闻】Unity公司招聘流程大公开
  9. python爬取高德POI并生成shp(关键字搜索/多边形搜索)
  10. 学生台灯什么牌子好对眼睛好?专业护眼灯的学生台灯分享