在上面两篇分别说明了设计中较为简单也是很关键的实践点。

第一模块划分,它是根据每个模块所承载的业务,进行划分,是应用程序一个静态的描述。

第二合理组合,它是是将每个模块调动起来,共同实现业务,是一个准动态的说明。

今天主要说明真个应用程序中消息和数据,以及如何循环,是完全动态的。同时也简单的提到各种设计框架。是终结篇。

我们先拿下载这个业务来说。显示用户点击了界面下载按钮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 设计随便说说之简单实践(消息流动)的更多相关文章

  1. Android 设计随便说说之简单实践(合理组合)

    上一篇(Android 设计随便说说之简单实践(模块划分))例举了应用商店设计来说明怎么做模块划分.模块划分主要依赖于第一是业务需求,具体是怎么样的业务.应用商店则包括两个业务,就是向用户展示appl ...

  2. Android 设计随便说说之简单实践(模块划分)

    上篇随笔随(Android 设计随便说说)便说了一下什么是设计以及设计的原则,这里举一个简单的例子来进一步的说Android设计.我们以应用商店的设计来举例. 在设计之前,需要把握两部分内容,才能使得 ...

  3. Android 设计随便说说

    我曾经搞过应用程序的设计,当时只是读了半本宝典<重构...>,现在看来就这半本九阴真经,收益甚多啊 .再加上这现年工作上的印证,基本上可以拿出喷一下了.当然现在看来当年的项目设计真是很烂了 ...

  4. Java编程的逻辑 (61) - 内存映射文件及其应用 - 实现一个简单的消息队列

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  5. android 进程/线程管理(四)----消息机制的思考(自定义消息机制)

    关于android消息机制 已经写了3篇文章了,想要结束这个系列,总觉得少了点什么? 于是我就在想,android为什么要这个设计消息机制,使用消息机制是现在操作系统基本都会有的特点. 可是andro ...

  6. Chromium on Android: Android在系统Chromium为了实现主消息循环分析

    总结:刚开始接触一个Chromium on Android时间.很好奇Chromium主消息循环是如何整合Android应用. 为Android计划,一旦启动,主线程将具有Java消息层循环处理系统事 ...

  7. SLAM+语音机器人DIY系列:(二)ROS入门——5.编写简单的消息发布器和订阅器

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  8. Android ------ 美团的Lint代码检查实践

    概述 Lint是Google提供的Android静态代码检查工具,可以扫描并发现代码中潜在的问题,提醒开发人员及早修正,提高代码质量.除了Android原生提供的几百个Lint规则,还可以开发自定义L ...

  9. android设计准则

    ------------缘由-------------------------------------------------------------------------------------- ...

随机推荐

  1. Java之 AtomicInteger

    AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而AtomicIn ...

  2. HDOJ-ACM1012(JAVA)

    这道题很简单,主要是弄懂题意和注意输出: 输出的完整结果如下: n e - ----------- 0 1 1 2 2 2.5 3 2.666666667 4 2.708333333 5 2.7166 ...

  3. ssh -CT -o BatchMode=yes 用户名@主机名

  4. 2015 CCPC D- Pick The Sticks(UESTC 1218) (01背包变形)

    http://acm.uestc.edu.cn/#/problem/show/1218 既然二维dp表示不了,就加一维表示是否在边界放置,放置一个,两个.有一个trick就是如果只放一根,那么多长都可 ...

  5. 实用Yii扩展

    可以去官方搜索Yii扩展:Extensions | Yii PHP Framework http://www.yiiframework.com/extensions/?tag=tree Yii che ...

  6. eclipse安装插件checkstyle

    最近听说了一个eclipse神器:checkstyle,可以帮助java开发人员规范代码,对我这种有代码洁癖的人来说,这有着不小的魔力啊,必然要安装试一试啊. 我最喜欢的安装方式是 输入一个安装网址, ...

  7. oc学习之路----代理模式2-使用步骤

    之前已经写过一个个人关于代理模式的一些看法,现在就来总结一下使用代理模式的步骤吧. 1.先搞清楚谁是谁的代理(delegate) ● 2.定义代理协议,协议名称的命名规范:控件类名 + Delegat ...

  8. java request判断微信客户端访问

    微信客户端访问时候user-agent信息如下: Mozilla/5.0 (Linux; Android 5.0.1; M040 Build/LRX22C) AppleWebKit/537.36 (K ...

  9. NLog使用说明

    NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码. NLog允许我们自定义从跟踪消息的来源(source)到记录跟踪信息的目标(target)的规则 ...

  10. python学习(3)

    Python学习(3)切片(Slice):根据索引范围取出字符串里面的内容,比如: l=range(100)   l[:8] [0, 1, 2, 3, 4, 5, 6, 7]              ...