上一篇(Android 设计随便说说之简单实践(模块划分))例举了应用商店设计来说明怎么做模块划分。模块划分主要依赖于第一是业务需求,具体是怎么样的业务。应用商店则包括两个业务,就是向用户展示applist,和下载app。第二是运行环境,在Android平台,有androidsdk提供socket等API支持。因此将模块大体换发了5个模块。(当然了图片加载可以额外提出,用开源组件去做,但是这里为了说明如何设计,暂不提到。还有下载也可以利用开源组件)分别是如下:

模块1 UI模块,负责展示信息和用户操作,主要类,RecommendActivity 负责数据展示和接受用户操作。RecommendInterface,负责底层数据回调。(这里只是举例,下载的就不在提及)

这三个类之间的调用关系如下:(我的viso貌似没有激活部分功能不能用只能口述了)

1 在RecommendActivity的onCreate里面初始化RecommendInterface实例RecommendBase实例。并将RecommendInterface注入到RecommendBase里面。

2 RecommendActivity随后给RecommendBase发送指令调用getPageViewData等方法请求数据。

3 当用户点击下载。gotoDownLoadApp的是时候,RecommendBase开始调用startDownloadApp。

好了UI模块的调用流程大体到这里。

模块2 调度模块。负责整体业务调度。主要的类包括如下:

巨复杂。不过我们继续理一下各个类调用的关系。

1 初始化该模块就是初始化Controller。Controller初始化ControllerDownLoadAppInfosInterface, 和ControllerBase。Controller将ControlelrDownLoadAppInfosInterface注入到ControllerBase里面。controllerBase初始化的时候初始化ControllerDownLoadAppInterface。

2 关键点,UI模块如何和调度模块交互。

     2.1   RecommendBase里面初始化Controller和ControllerUIInterface。并将RecommendInterface注入到ControlelrUiInterface里面。

    2.2   当RecommendActivity接收到用户指令时,RecommendBase接收到指令调用Controller.而当异步的结果出来时,ControllerUIInterface 调用RecommendInterface。并且由RecommendInterface 将UI界面更新给用户。(由此可见消息是从RecommendBase循环了一圈。)

3 页面数据加载。Controller接收到RecommendBase来的指令后调用ControllerBase启动加载模板和数据getViewDataByTempID。当底层获取到Temp和Data的是时候,会通知到ControlelrDownLoadAppInfosInterface, 这个接口在回调Controller。 Controller调用CreateViewData。之后会调用ControllerUIInterface调用将数据给到UI。

还有下载过程。这里就不在推演了。但是主要的是要看模块间怎么调用,也即是说怎么合理组合。

会发现,上层业务和自己的依赖接口是一套全面的完整的业务。而调度层也是完成了一套完整的业务。

第三个模块,数据解析模块,负责网络的applist数据和模板解析并组合。

关键点,如何和调度模块交互

在调度层的ControllerBase里面初始化该类DataWorkManager, 调度层有了模板和app数据后,调用setData,然后在调用getViewDataBytempId就可以或的模板数据。

也就是说,在调度层的依赖类里面,初始化自己的接口,并且根据依赖类的方法来实现业务。

但是这个是一个业务单元,不能实现整体业务。

第四个模块,网络请求模块。

关键点,如何和调度层交互。

首先在ControllerBase里面初始化NetTaskManager和NetTaskResultListener。并且ControllerDownLoadAppinfosInterface注入到NetTaskResultListener。

然后开始调用downLoadTemplateById()。异步的,结果由NetTaskResultListener反馈给ControllerDownLoadAppinfosInterface。由ControllerDownLoadAppinfosInterface来处理这个消息。

模块5 下载模块,还需要说么?我想不必了。

其实合理组合就看你在模块之间如何调度了。模块之所以提供接口,是因为第一,他的模块不需要其他模块所关心的。只要调用它的接口即可。第二,如果他的实现出现问题,问题解决也必然在这个模块里面。不会需要其他地方的修改。因此原则上无论模块如何改变,但不允许接口改变。

每个模块都有自己的依赖类,但是如果其他模块有类似的实现,则提供的接口必然和前者模块的依赖做出一个适配来实现无缝连接。上面的例子都是很简单的。基本上没有太多的需要依赖和接口之间的适配,但是实际工作中多着去了。

最后,很抱歉的说,上面的例子多有纰漏,很多地方只是说明说的很简单,很粗糙,有冗余,甚至有错。仅仅希望能有所获益。

Android 设计随便说说之简单实践(合理组合)的更多相关文章

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

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

  2. Android 设计随便说说之简单实践(消息流动)

    在上面两篇分别说明了设计中较为简单也是很关键的实践点. 第一模块划分,它是根据每个模块所承载的业务,进行划分,是应用程序一个静态的描述. 第二合理组合,它是是将每个模块调动起来,共同实现业务,是一个准 ...

  3. Android 设计随便说说

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

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

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

  5. android设计准则

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

  6. Xamarin.Android之引导页的简单制作

    0x01 前言 对于现在大部分的APP,第一次打开刚安装或更新安装的APP都会有几个引导界面,通常这几个引导页是告诉用户 APP有些什么功能或者修改了什么bug.新增了什么功能等等等. 下面就用Xam ...

  7. Android 自定义View (五)——实践

    前言: 前面已经介绍了<Android 自定义 view(四)-- onMeasure 方法理解>,那么这次我们就来小实践下吧 任务: 公司现有两个任务需要我完成 (1)监测液化天然气液压 ...

  8. 【转】Android设计中的.9.png

    来源:http://isux.tencent.com/android-ui-9-png.html Android设计中的.9.png 注意:当使用9.png做TextView背景时,一定要设置内容区域 ...

  9. SQL知识以及SQL语句简单实践

    综述 大家都知道SQL是结构化查询语言,是关系数据库的标准语言,是一个综合的,功能极强的同时又简洁易学的,它集级数据查询(Data Quest),数据操纵(Data Manipulation),数据定 ...

随机推荐

  1. VM Depot 新功能:直接通过 Windows Azure 管理门户部署虚拟机

     发布于 2014-05-09 作者 陈 忠岳 想要尝试 VM Depot 上数以百计的各类开源虚拟机,却因为复杂的命令行操作而感到烦恼?微软开放技术想您所想,及时推出 VM Depot 最新功能 ...

  2. Linux停SVN提交时强制写日志

    Linux下SVN提交时强制写日志 SVN默认可以不写注释提交,有时候可能忘记写注释,有的人也没有写注释的习惯,导致翻看history的时候都不知道做了哪些更改,可以依照以下步骤修改SVN配置,强制提 ...

  3. DATEDIFF()(转)

    SQL DATEDIFF 函数 Leave a reply SQL DATEDIFF() 函数用来返回2个时间的差.这个函数在SQL Server和MySQL中都有,但语法上有不同. SQL CASE ...

  4. usaco 猜数游戏

    Description 为了提高智商,锻炼思维能力,奶牛设计了一个猜数游戏.游戏开始前,贝西会在牛棚后面摆上N个数字.所有数字排成一条直线,按次序从1到N编号.每个数字在1到10^9之间,没有两个数字 ...

  5. phpeclipse xdebug 配置配置 -摘自网络

    一.安装配置 1.访问 http://www.phpeclipse.com/ ,找到右边的 1.2.x dev nightly下的http://update.phpeclipse.com/update ...

  6. java实现简单的文件筛选

    package filenameFilter; import java.io.File; /* * 实现功能: * 获取指定路径下的指定格式的文件; * */ public class Test { ...

  7. btrace 笔记

    转载请注明原链接地址 http://www.cnblogs.com/dongxiao-yang/p/6134393.html btrace 是一个可以不用重启线上java业务查问题的神器,记一下自己折 ...

  8. c#+ArcEngine中的IGroupLayer的用法

    转自羊子雄起原文c#+ArcEngine中的IGroupLayer的用法 在AE开发中,我们知道axMapControl.LayerCount能获取图层的数量,但是这种方法不能获取到图层组里面的图层, ...

  9. myeclipse输入“.”后没有自动提示功能

    今天和室友安装了一样的myeclipse版本,结果室友的自动提示功能有,我的输入"."后却不能提示,这对我们敲代码简直来说是一个折磨,不能自动提示,本来还以为是系统问题,一个是wi ...

  10. SAP HANA SLT 将Oracle表 数据同步到HANA数据库

    简单介绍SLT 同步数据的整个配置过程: 在SLT系统中创建与Oracle的链接 在HANA监控平台上,创建Configuration 创建表的同步作业 ——————————————BEGIN———— ...