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

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

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

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

我们先拿下载这个业务来说。显示用户点击了界面下载按钮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. MVC自定义分页(附表跳转页Loading提示)

    之前我发表了一篇MVC无刷新分页的文章,里面用的是MvcPager控件,但是那个受那个控件限制,传值只能用PagedList,各方面都受到了限制,自由度不够高,现在还是做MVC无刷新分页,但是想直接用 ...

  2. Light OJ 1031 - Easy Game(区间dp)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1031 题目大意:两个选手,轮流可以从数组的任意一端取值, 每次可以去任意个但仅 ...

  3. Eclipse安装Database Development插件。

        早期版本的Eclipse,自带Database Development,用着挺方便的,可是自己的最新版Eclipse反而没有.于是乎钻研了下,找到了安装方法.和汉化包安装很类似: 菜单栏里选择 ...

  4. CodeForces 701A Cards

    直接看示例输入输出+提示 1. 统计所有数的和 sum,然后求 sum/(n/2) 的到一半数的平均值 6 1 5 7 4 4 3 ->1+5+7+4+4+3=24  分成3组 每组值为8 in ...

  5. NovaMind *的安装、和谐破解到永久使用

    XMind *思维导图的安装步 同类型的软件,这两款软件: XMind 和 NovaMind,各有所长.建议,都安装,合适的时候方便使用. XMind界面如下: NovaMind界面如下: 本博文,主 ...

  6. heap堆内存不足

    配置jvm内存,加个启动参数 -Xms512m -Xmx512m -XX:PermSize=128m  -XX:MaxPermSize=256m   start 下面是这个: -Dcatalina.h ...

  7. SpecFlow使用入门之C# BDD

    SpecFlow使用入门 http://www.specflow.org/ SpecFlow是一个BDD工具,在这里对BDD不多赘述,你可以阅读一下微软2010年十二月的一篇文章,此外如果你想要更多了 ...

  8. 在Visual Studio 2012中使用VMSDK开发领域特定语言1

    在Visual Studio 2012中使用VMSDK开发领域特定语言(一)   前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modelin ...

  9. Extjs的架构设计思考,单页面应用 or 多页面?

    写在前面:不要认为 EXTJS 高版本就是一个界面改良,在项目中,仍然用 N 张页面,在 N 张页面部署 EXTJS .这种方式不用多讲,效率问题大家都看得出来, EXTJS 是一个集成开发工具,注定 ...

  10. thinkphp5多图上传 js部分

    在项目中常会用到多图上上传,那就需要多图上传后需要预览,并且能删掉传错(不想传)的图,然而 测试了半天 并不知道jq怎么写,parent()parents()用了半天无果,罢了,还是用原生js来写.这 ...