Android 设计随便说说之简单实践(消息流动)
在上面两篇分别说明了设计中较为简单也是很关键的实践点。
第一模块划分,它是根据每个模块所承载的业务,进行划分,是应用程序一个静态的描述。
第二合理组合,它是是将每个模块调动起来,共同实现业务,是一个准动态的说明。
今天主要说明真个应用程序中消息和数据,以及如何循环,是完全动态的。同时也简单的提到各种设计框架。是终结篇。
我们先拿下载这个业务来说。显示用户点击了界面下载按钮onClick,然后onClicK调用调度层的onStartDownLoadApp(Item), 而调度层又将指令业务单元模块下载模块。调用下载模块的onStartDown(Item)。从这里可以看出,消息是一层一层的向下传递去。此时下载模块开始下载到数据,然后上报下载进度downLaodProgress(id, progress),该方法传递了下载项信息(id)和进度信息(progress),并且调用到调度层的downLoadAppProgress(id,progress),调度层的该方法有经一部的调用onUpdateProgress. 从而实现从下载模块到页面的一个数据的传递。

注意从下载模块向上报进度的时候,是异步的,因为下载是异步的,所以上报进度需要到主线程里,所以相对下载来说该消息是异步的才能到主线程。
由上可见,
1 消息的一步步同时下发,而且必然经过调度层。
2 数据的上报也是一层一层上传,而且必然经过调度层。
当然,还可以举其他例子,这里就不在举例了。总体来说在设计的时候,务必要理清楚消息和数据是如何流动,才能完整的总结出业务模型并且切合到设计中。
设计模型中有MVC,MVP,MVVM。其中MVC有个特征就是不但C可以更新V而且M也可以更新V(圆形的消息流),那么这样设计过程中V不但要照顾到C还要照顾到M,而M同样不但要照顾到C还要照顾到V。这样显然是体现了复杂度。但是在大型的web项目中是很常用的。而MVP和MVVM的特征是V只和P(或者VM)相互调用,不被M调用。M只和P(或者VM)相互调用,而和V没有直接关系。因此在设计中,V和M不必相互照顾。
上面提到的都是比较成熟的设计模型,但是无论那种设计模型都追求的目标是“低耦合,高内聚”,各个模块相互照应但是有各司其职。照应中需要做到很好的解耦。
设计中常常用的五视图方法,该方法比较全面,即考虑的周围的运行环境和关联模块,也从动态和静态描述了程序内部的接口和联动方式。我用这种方法做过两次设计。还是很不错。以上四篇是结合他的理论以及我的实践一个简单的总结。
突然想到还有一点没有谈到,就是业务的变化与不变的考虑。这个也是非常重要,设计中要充分的考虑到那些业务会发生变化,如何将变化锁定在可控的范围内。这就需要一层接口,通过接口来规范可变的业务实现,及无论业务如何变化,都必须遵守该接口的契约。
完了。
Android 设计随便说说之简单实践(消息流动)的更多相关文章
- Android 设计随便说说之简单实践(合理组合)
上一篇(Android 设计随便说说之简单实践(模块划分))例举了应用商店设计来说明怎么做模块划分.模块划分主要依赖于第一是业务需求,具体是怎么样的业务.应用商店则包括两个业务,就是向用户展示appl ...
- Android 设计随便说说之简单实践(模块划分)
上篇随笔随(Android 设计随便说说)便说了一下什么是设计以及设计的原则,这里举一个简单的例子来进一步的说Android设计.我们以应用商店的设计来举例. 在设计之前,需要把握两部分内容,才能使得 ...
- Android 设计随便说说
我曾经搞过应用程序的设计,当时只是读了半本宝典<重构...>,现在看来就这半本九阴真经,收益甚多啊 .再加上这现年工作上的印证,基本上可以拿出喷一下了.当然现在看来当年的项目设计真是很烂了 ...
- Java编程的逻辑 (61) - 内存映射文件及其应用 - 实现一个简单的消息队列
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- android 进程/线程管理(四)----消息机制的思考(自定义消息机制)
关于android消息机制 已经写了3篇文章了,想要结束这个系列,总觉得少了点什么? 于是我就在想,android为什么要这个设计消息机制,使用消息机制是现在操作系统基本都会有的特点. 可是andro ...
- Chromium on Android: Android在系统Chromium为了实现主消息循环分析
总结:刚开始接触一个Chromium on Android时间.很好奇Chromium主消息循环是如何整合Android应用. 为Android计划,一旦启动,主线程将具有Java消息层循环处理系统事 ...
- SLAM+语音机器人DIY系列:(二)ROS入门——5.编写简单的消息发布器和订阅器
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- Android ------ 美团的Lint代码检查实践
概述 Lint是Google提供的Android静态代码检查工具,可以扫描并发现代码中潜在的问题,提醒开发人员及早修正,提高代码质量.除了Android原生提供的几百个Lint规则,还可以开发自定义L ...
- android设计准则
------------缘由-------------------------------------------------------------------------------------- ...
随机推荐
- INTERRUPT CONTROLLER
1,中断的基本概念 CPU与外设之间传输数据的控制方式通常有3种:查询方式,中断方式和DMA方式.查询方式的优点是硬件开销小不需要额外的硬件支持只是通过软件不断的轮询,使用起来也就比较简单,但在此方式 ...
- By类的使用
举例,页面上有5个table,每个table都有标题栏和内容栏你觉的我是把每个table的标题都放到List里面遍历使用还是现指定table,在获取table的标题栏使用呢明显后面的方便不容易乱麽所 ...
- curl 使用简介
Libcurl使用介绍: 四个关键函数: 1. curl_easy_init() 初始化curl环境,新建curl对象,返回对象句柄,使用举例: CURL *handler = cur ...
- [Codechef October Challenge 2014]刷漆
问题描述 Czy做完了所有的回答出了所有的询问,结果是,他因为脑力消耗过大而变得更虚了:).帮助Czy恢复身材的艰巨任务落到了你的肩上. 正巧,你的花园里有一个由N块排成一条直线的木板组成的栅栏,木板 ...
- [CODEVS3299]有序数组合并求第K大问题
题目描述 Description 给出两个有序数组A和B(从小到大有序),合并两个有序数组后新数组c也有序,询问c数组中第k大的数 假设不计入输入输出复杂度,你能否给出一个O(logN)的方法? 输入 ...
- Java笔记(二十九)……网络编程
概述 网络模型 网络通讯的要素 ip地址:网络中设备的标识符 端口:用于标识同一台设备上不同的进程,有效端口:0~65535,其中0~1024是系统使用端口或者保留端口 TCP与UDP UDP特点: ...
- Android完全退出应用程序,完美解决方案
最近公司工作不是很忙,就抽空研究了下Android的引导页,但是在写完引导页并且进入到住页面之后,在退出时,采用"再按一次退出"的方式去实现的,用的方式是杀掉进程跟exit,即:a ...
- 如何在Azure上创建和部署云服务
Azure 管理门户提供两种方法可用来创建和部署一个云服务:快速创建和自定义创建. 本主题说明如何使用快速创建方法来创建新的云服务,然后使用上传来上载和部署一套在 Azure 的云服务.当您使用此方法 ...
- Kooboo中怎么写Page Plugin -摘自官方文档
Page plugin development Page plugin is an add-on to Kooboo CMS, and is responsible for making data s ...
- centos6.4 yum kvm
1. 安装软件包: yum -y install virt-manager; yum install qemu-kvm yum install libvirt yum install libvi ...