Android 设计随便说说之简单实践(合理组合)
上一篇(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 设计随便说说之简单实践(合理组合)的更多相关文章
- Android 设计随便说说之简单实践(模块划分)
上篇随笔随(Android 设计随便说说)便说了一下什么是设计以及设计的原则,这里举一个简单的例子来进一步的说Android设计.我们以应用商店的设计来举例. 在设计之前,需要把握两部分内容,才能使得 ...
- Android 设计随便说说之简单实践(消息流动)
在上面两篇分别说明了设计中较为简单也是很关键的实践点. 第一模块划分,它是根据每个模块所承载的业务,进行划分,是应用程序一个静态的描述. 第二合理组合,它是是将每个模块调动起来,共同实现业务,是一个准 ...
- Android 设计随便说说
我曾经搞过应用程序的设计,当时只是读了半本宝典<重构...>,现在看来就这半本九阴真经,收益甚多啊 .再加上这现年工作上的印证,基本上可以拿出喷一下了.当然现在看来当年的项目设计真是很烂了 ...
- Android ------ 美团的Lint代码检查实践
概述 Lint是Google提供的Android静态代码检查工具,可以扫描并发现代码中潜在的问题,提醒开发人员及早修正,提高代码质量.除了Android原生提供的几百个Lint规则,还可以开发自定义L ...
- android设计准则
------------缘由-------------------------------------------------------------------------------------- ...
- Xamarin.Android之引导页的简单制作
0x01 前言 对于现在大部分的APP,第一次打开刚安装或更新安装的APP都会有几个引导界面,通常这几个引导页是告诉用户 APP有些什么功能或者修改了什么bug.新增了什么功能等等等. 下面就用Xam ...
- Android 自定义View (五)——实践
前言: 前面已经介绍了<Android 自定义 view(四)-- onMeasure 方法理解>,那么这次我们就来小实践下吧 任务: 公司现有两个任务需要我完成 (1)监测液化天然气液压 ...
- 【转】Android设计中的.9.png
来源:http://isux.tencent.com/android-ui-9-png.html Android设计中的.9.png 注意:当使用9.png做TextView背景时,一定要设置内容区域 ...
- SQL知识以及SQL语句简单实践
综述 大家都知道SQL是结构化查询语言,是关系数据库的标准语言,是一个综合的,功能极强的同时又简洁易学的,它集级数据查询(Data Quest),数据操纵(Data Manipulation),数据定 ...
随机推荐
- VirtualBox设置共享文件夹和镜像访问的方法
VirtualBox设置共享文件夹和镜像访问的方法 virtualBox是一款虚拟机软件,可以在该软件上安装各类的操作系统,至于如何安装请参见另外一篇经验<如何使用VirtualBox安装win ...
- POJ_2987_Firing_(最大流+最大权闭合图)
描述 http://poj.org/problem?id=2987 要炒员工鱿鱼,炒了一个人,他的下属一定被炒.给出每个人被炒后公司的收益(负值表示亏损),问怎样炒公司收益最大,以及这种方法炒了几个人 ...
- Beta Round #9 (酱油杯noi考后欢乐赛)随机数生成器
题目:http://www.contesthunter.org/contest/Beta%20Round%20%EF%BC%839%20%28%E9%85%B1%E6%B2%B9%E6%9D%AFno ...
- SQL Server select into用法
作用: SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档 这个语句会在数据库中用和你所指定的列类型和 ...
- FileZilla 425 Can't open data connection
FileZilla 425 Can't open data connection WIN 2008 SERVER+FileZilla FTP Server,FTP端口:2013 防火墙中已允许FTP ...
- java基础(十八)IO流(一)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- CUDA编程-(1)Tesla服务器Kepler架构和万年的HelloWorld
结合CUDA范例精解以及CUDA并行编程.由于正在学习CUDA,CUDA用的比较多,因此翻译一些个人认为重点的章节和句子,作为学习,程序将通过NVIDIA K40服务器得出结果.如果想通过本书进行CU ...
- vijosP1006 晴天小猪历险记之Hill
vijosP1006 晴天小猪历险记之Hill 链接:https://vijos.org/p/1006 [思路] 图上DP. 这个题的递推顺序是关键.先从上一行得到最小值,然后从本行比较最小值,注意本 ...
- GCC内联汇编入门
原文为GCC-Inline-Assembly-HOWTO,在google上可以找到原文,欢迎指出翻译错误. 中文版说明 由于译者水平有限,故译文出错之处,还请见谅.C语言的关键字不译,一些单词或词组( ...
- 一个简单的DELPHI程序注册码设计 .
当你辛辛苦苦用DELPHI做好了一个你认为十分不错的程序,你是否想把它发布出去成为共享软件呢 做为一个共享软件,注册码肯定是少不了的,你可以通过判断程序是否注册来进行功能,时间或一些其它限制.现在就 ...