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设计准则
------------缘由-------------------------------------------------------------------------------------- ...
随机推荐
- Android 实用代码七段(二)
声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 一.获取应用程序下所有Acti ...
- lightoj 1010
题意,在一个n*n的棋盘上放置一些马,使这些马不能互相攻击,问最多能放多少. 思路:从第一行每隔一个放置一个马即可,注意n=1和n=2的情况要特判. #include<cstdio> in ...
- [Irving]SqlServer 拆分函数用法
drop function dbo.split 删除自定义函数 dbo.split 函数名 函数 dbo.splitcreate function dbo.split(@c varchar(100 ...
- linux网站配置文件.htaccess伪静态转换到IIS web.config中
linux下的php网站放到Windows服务器IIS下.htaccess文件伪静态规则转换. 此办法只适合于linux下的php网站放到Windows服务器IIS下,网站除了主页面正常以外子页面 ...
- asp.net 中Session的运用,及抛出错误“未将对象引用设置到对象的实例”
1. 页面载入后,必须要等到page_Load方法执行建立 page对象后才可以使用Session 2. 在.aspx和.cs文件中使用Session的区别 (1).aspx: Session[&qu ...
- 用opencv画矩形打上马赛克Mosaic
/*----------------------------------------------------------------------------- * * 版权声明: * 可以 ...
- ModelSim仿真
(1)出现“Fatal: SDF files require Altera primitive library” 书上的方法是在ModelSim-SE下的使用,而我用的是ModelSim-Alter ...
- 坑爹的IE quirk模式【转】
调试一个页面,ie下面页面css样式很是奇怪,各种失效.找了半天原因不知道怎么回事.最后在调试工具中发现,文档模式为quirk,改成别的(IE 7|8|9)正常. 为什么会自动选择此文档模式呢? 先看 ...
- 分布式搜索elasticsearch 索引文档的增删改查 入门
1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200/ ...
- shell 中函数放回字符串问题
shell 中函数放回字符串问题 shell 中不可以直接 return 字符串 ,可以return 数字.如果要return 字符串 改为 echo "hello world" ...