CN109144488A - 一种基于安卓系统的架构设计方法 - Google Patents
一种基于安卓系统的架构设计方法 Download PDFInfo
- Publication number
- CN109144488A CN109144488A CN201811150788.9A CN201811150788A CN109144488A CN 109144488 A CN109144488 A CN 109144488A CN 201811150788 A CN201811150788 A CN 201811150788A CN 109144488 A CN109144488 A CN 109144488A
- Authority
- CN
- China
- Prior art keywords
- module
- class
- binder
- adapter
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于安卓系统的架构设计方法,包括module模块、bean模块、api模块、binder模块、adapter模块和database模块,database模块、api模块和bean模块设置在MVP模式的Model层,binder模块设置在MVP模式的Presenter层,adapter模块设置在MVP模式的View层,module模块分别设置在MVP模式的Presenter层和View层。基于MVP模式+RxJava+Retrofit架构,可以快速的开发项目,缩短开发周期,降低时间成本,并采用了缓存的方式,消除了callbackhell现象。
Description
技术领域
本发明涉及移动互联网技术领域,具体的说,是一种基于安卓系统的架构设计方法。
背景技术
2012年Netflix为了满足他们庞大的用户群体决定重新设计架构来减少REST调用次数。取代几十次的REST调用,让客户端自己处理需要的数据,他们决定基于客户端需求创建一个专门优化过的REST调用。为实现该目标,他们决定尝试响应式,将.NET Rx迁移到JVM上。2013年,RxJava诞生。2016年,RxJava成为最有前景的安卓开发方式。Retrofit也是Square公司开发的一款针对Android网络请求的框架,其实质就是对okHttp的封装,使用面向接口的方式进行网络请求,利用动态生成的代理类封装了网络接口。随着RxJava的流行,Retrofit也迅速推出适配Rxjava的类。在rxjava出现之前,安卓采用AsyncTask和handler来实现异步代码,它们的问题在于当程序随迭代业务逻辑越来越复杂时,出现多层嵌套缩进,代码变得难以维护。而rxjava的出现就解决了这个问题,无论程序逻辑多么复杂,rxjava却能始终保持一条清晰地链式调用,因此如何运用新技术迅速搭建项目架构并降低时间成本成为新的问题。
发明内容
本发明的目的在于提供一种基于安卓系统的架构设计方法,用于解决现有技术中不能运用新技术快速的搭建项目架构的问题。
本发明通过下述技术方案解决上述问题:
一种基于安卓系统的架构设计方法,包括采用MVP模式的module模块、bean模块、api模块、binder模块、adapter模块和database模块,所述database模块、api模块和bean模块设置在MVP模式的Model层,所述binder模块设置在MVP模式的Presenter层,所述adapter模块设置在MVP模式的View层,所述module模块分别设置在MVP模式的Presenter层和View层,其中:
api模块,包括IXXApi接口,用于请求网络数据,请求网络数据的返回值是Observable类型;
module模块调用RetrofitFactory类获取Retrofit类,调用Retrofit类访问IXXApi接口获取返回的Observable类,Retrofit类把请求封装进Observable类,module模块在请求结束后调用onNext()或在请求失败后调用onError();
module模块调用Register类的register方法注册bean模块的binder类,binder类通过RetrofitFactory类调用api模块的IXXApi接口获取网络数据;或调用database模块的XXDao类获取本地存储数据;
module模块采用MultiTypeAdater适配器注册binder模块的binder类来显示数据。
进一步地,所述module模块包括用于定义Presenteror接口和View接口的IXX接口、用于实现Presenteror接口具体操作的XXPresenteror类以及用于实现View接口具体操作的XXFragment类和XXView类;
所述binder模块的binder类将数据与module模块的XXPresenterer类的MultiTypeAdapter适配器绑定,从而显示数据。
进一步地,所述binder类中定义ViewHolder以及将ViewHolder与数据的具体操作绑定。
进一步地,还包括给所述module模块、bean模块、api模块、binder模块、adapter模块和database模块提供可调用的通用工具类的util模块。
进一步地,还包括adapter模块,所述adapter模块自定义适配器,并通过自定义适配器注册binder模块的binder类,进行实现数据的展示。
原理:
module模块作为View层和Presenterer层,调用Register类的register方法注册binder模块中的对应binder类,binder类可以通过RetrofitFactory类调用api模块的对应api类获取到网络数据,也可以通过调用database模块的对应XXDao类获取本地存储数据。XXDAO,其中XX对应业务,DAO为数据访问接口(Data Access Object)。module模块中IXX接口定义View接口和Presenterer接口的规范,XXPresenterer类引入IXX接口的Presenterer接口,并将其具体实现。XXFragment类、XXView类、XXActivity类采用implements类实现IXX接口的View接口中定义的抽象方法。
database模块,XXTable类定义本地存储数据表中的列名,DatabaseHelper类继承SQLiteOpenHelper,用于连接数据表,帮助创建数据表,执行sql语句,XXDao类根据业务需求写对应数据表数据的具体操作,增删改查;
api模块,IXXApi接口即是一个服务,以RxJava+Retrofit技术,请求网络数据的返回值是Observable类型。在处理业务逻辑的地方调用RetrofitFactory类获取到Retrofit类,调用IXXApi接口获取到返回的Observable类,Retrofit类把请求封装进Observable类,module模块在请求结束后调用onNext()或在请求失败后调用onError()。RetrofitFactory类实现了缓存机制,即在响应请求后在本地建立一个文件夹用于保存缓存数据,这样在请求数据时,如果判断没有网络,则自动读取缓存的数据,如果判断有网络,则从网络中获取数据并保存到缓存中。
binder模块,在View层创建的MultiTypeAdapter适配器都有对应的binder类,binder类为适配器的数据绑定器。binder类继承自ItemViewBinder,原来在自定义adapter中实现的自定义ViewHolder、绑定ViewHolder与数据的具体操作都在binder类中实现。MultiTypeAdapter适配器调用Register类的register方法与binder类连接。
module模块的XXFragment类、XXActivity类、XXView类作为View层,XXPresenterer类、binder模块作为Presenter层,database模块、api模块、bean模块均属于Model层,即采用MVP模式。在MVP模式下,View层并不直接使用Model层,它们之间的通信是通过Presenterer层来进行的,所有的交互都发生在Presenterer层内部,Model层和View层被Presenterer层完全隔开,View层是完全被动的。
本发明与现有技术相比,具有以下优点及有益效果:
(1)本发明提供了一种基于安卓系统的MVP模式+RxJava+Retrofit架构的方法,采用此架构可以快速的开发项目,缩短开发周期,降低时间成本。
(2)本发明采用了缓存的方式,消除了现有技术中由于异步回调函数过多的嵌套,导致代码可读性下降以及出错率提到的问题即消除了callbackhell现象。
附图说明
图1为本发明的架构图;
图2为MVP模式的示意图。
具体实施方式
下面结合实施例对本发明作进一步地详细说明,但本发明的实施方式不限于此。
实施例1:
结合附图1所示,一种基于安卓系统的架构设计方法,包括采用MVP模式的module模块、bean模块、api模块、binder模块、adapter模块和database模块,所述database模块、api模块和bean模块设置在MVP模式的Model层,所述binder模块设置在MVP模式的Presenter层,所述adapter模块设置在MVP模式的View层,所述module模块分别设置在MVP模式的Presenter层和View层,其中:
api模块,包括IXXApi接口,用于请求网络数据,请求网络数据的返回值是Observable类型;
module模块调用RetrofitFactory类获取Retrofit类,调用Retrofit类访问IXXApi接口获取返回的Observable类,Retrofit类把请求封装进Observable类,module模块在请求结束后调用onNext()或在请求失败后调用onError();
module模块调用Register类的register方法注册bean模块的binder类,binder类通过RetrofitFactory类调用api模块的IXXApi接口获取网络数据;或调用database模块的XXDao类获取本地存储数据;
module模块采用MultiTypeAdater适配器注册binder模块的binder类来显示数据。
所述module模块包括用于定义Presenteror接口和View接口的IXX接口、用于实现Presenteror接口具体操作的XXPresenteror类以及用于实现View接口具体操作的XXFragment类和XXView类;
所述binder模块的binder类将数据与module模块的XXPresenterer类的MultiTypeAdapter适配器绑定,从而显示数据。
进一步地,还包括给所述module模块、bean模块、api模块、binder模块、adapter模块和database模块提供可调用的通用工具类的util模块。
进一步地,还包括adapter模块,所述adapter模块自定义适配器,并通过自定义适配器注册binder模块的binder类,进行实现数据的展示。
原理:
module模块作为View层和Presenterer层,调用Register类的register方法注册binder模块中的对应binder类,binder类可以通过RetrofitFactory类调用api模块的对应api类获取到网络数据,也可以通过调用database模块的对应XXDao类获取本地存储数据。XXDAO,其中XX对应业务,DAO为数据访问接口(Data Access Object)。module模块中IXX接口定义View接口和Presenterer接口的规范,XXPresenterer类引入IXX接口的Presenterer接口,并将其具体实现。XXFragment类、XXView类、XXActivity类采用implements类实现IXX接口的View接口中定义的抽象方法。
database模块,XXTable类定义本地存储数据表中的列名,DatabaseHelper类继承SQLiteOpenHelper,用于连接数据表,帮助创建数据表,执行sql语句,XXDao类根据业务需求写对应数据表数据的具体操作,增删改查;
api模块,IXXApi接口即是一个服务,以RxJava+Retrofit技术,请求网络数据的返回值是Observable类型。在处理业务逻辑的地方调用RetrofitFactory类获取到Retrofit类,调用IXXApi接口获取到返回的Observable类,Retrofit类把请求封装进Observable类,module模块在请求结束后调用onNext()或在请求失败后调用onError()。RetrofitFactory类实现了缓存机制,即在响应请求后在本地建立一个文件夹用于保存缓存数据,这样在请求数据时,如果判断没有网络,则自动读取缓存的数据,如果判断有网络,则从网络中获取数据并保存到缓存中。
binder模块,在View层创建的MultiTypeAdapter适配器都有对应的binder类,binder类为适配器的数据绑定器。binder类继承自ItemViewBinder,原来在自定义adapter中实现的自定义ViewHolder、绑定ViewHolder与数据的具体操作都在binder类中实现。MultiTypeAdapter适配器调用Register类的register方法与binder类连接。
module模块的XXFragment类、XXActivity类、XXView类作为View层,XXPresenterer类、binder模块作为Presenter层,database模块、api模块、bean模块均属于Model层,即采用MVP模式。在MVP模式下,View层并不直接使用Model层,它们之间的通信是通过Presenterer层来进行的,所有的交互都发生在Presenterer层内部,Model层和View层被Presenterer层完全隔开,View层是完全被动的。
尽管这里参照本发明的解释性实施例对本发明进行了描述,上述实施例仅为本发明较佳的实施方式,本发明的实施方式并不受上述实施例的限制,应该理解,本领域技术人员可以设计出很多其他的修改和实施方式,这些修改和实施方式将落在本申请公开的原则范围和精神之内。
Claims (5)
1.一种基于安卓系统的架构设计方法,其特征在于,包括采用MVP模式的module模块、bean模块、api模块、binder模块、adapter模块和database模块,所述database模块、api模块和bean模块设置在MVP模式的Model层,所述binder模块设置在MVP模式的Presenter层,所述adapter模块设置在MVP模式的View层,所述module模块分别设置在MVP模式的Presenter层和View层,其中:
api模块,包括IXXApi接口,用于请求网络数据,请求网络数据的返回值是Observable类型;
module模块调用RetrofitFactory类获取Retrofit类,调用Retrofit类访问IXXApi接口获取返回的Observable类,Retrofit类把请求封装进Observable类,module模块在请求结束后调用onNext()或在请求失败后调用onError();
module模块调用Register类的register方法注册bean模块的binder类,binder类通过RetrofitFactory类调用api模块的IXXApi接口获取网络数据;或调用database模块的XXDao类获取本地存储数据;
module模块采用MultiTypeAdater适配器注册binder模块的binder类来显示数据。
2.根据权利要求1所述的一种基于安卓系统的架构设计方法,其特征在于,所述module模块包括用于定义Presenteror接口和View接口的IXX接口、用于实现Presenteror接口具体操作的XXPresenteror类以及用于实现View接口具体操作的XXFragment类和XXView类;
所述binder模块的binder类将数据与module模块的XXPresenterer类的MultiTypeAdapter适配器绑定,从而显示数据。
3.根据权利要求2所述的一种基于安卓系统的架构设计方法,其特征在于,所述binder类中定义ViewHolder以及将ViewHolder与数据的具体操作绑定。
4.根据权利要求3所述的一种基于安卓系统的架构设计方法,其特征在于,还包括给所述module模块、bean模块、api模块、binder模块、adapter模块和database模块提供可调用的通用工具类的util模块。
5.根据权利要求3所述的一种基于安卓系统的架构设计方法,其特征在于,还包括adapter模块,所述adapter模块自定义适配器,并通过自定义适配器注册binder模块的binder类,进行实现数据的展示。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811150788.9A CN109144488A (zh) | 2018-09-29 | 2018-09-29 | 一种基于安卓系统的架构设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811150788.9A CN109144488A (zh) | 2018-09-29 | 2018-09-29 | 一种基于安卓系统的架构设计方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109144488A true CN109144488A (zh) | 2019-01-04 |
Family
ID=64813827
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811150788.9A Pending CN109144488A (zh) | 2018-09-29 | 2018-09-29 | 一种基于安卓系统的架构设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109144488A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023179140A1 (zh) * | 2022-03-21 | 2023-09-28 | Oppo广东移动通信有限公司 | 应用处理装置、控制方法、电子设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108074058A (zh) * | 2016-11-15 | 2018-05-25 | 北京京东尚科信息技术有限公司 | 仓储管理方法及装置 |
-
2018
- 2018-09-29 CN CN201811150788.9A patent/CN109144488A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108074058A (zh) * | 2016-11-15 | 2018-05-25 | 北京京东尚科信息技术有限公司 | 仓储管理方法及装置 |
Non-Patent Citations (7)
Title |
---|
刘升贵: "《基于MVP模式的Android应用程序实现及其单元测试研究》", 《福建电脑》 * |
天津滨海迅腾科技集团有限公司主编: "《Android项目式案例开发》", 31 August 2018, 天津:南开大学出版社 * |
田晶: "《基于Android系统的移动警务App设计》", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
郁书好; 田志会; 朱成棋; 范祥林: "《基于Android的毕业设计选题系统设计与实现》", 《软件导刊》 * |
陈功锁; 温佐承; 彭志强: "《基于安卓平台的高校运维系统设计与实现》", 《电脑知识与技术》 * |
韩迪;李建庆: "《Android实例详解 项目实训开发》", 31 August 2016 * |
魏亮水;宋英男;邓静静;崔星童: "《基于Android的大学生在线心理轻问诊APP的设计与实现》", 《电脑知识与技术》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023179140A1 (zh) * | 2022-03-21 | 2023-09-28 | Oppo广东移动通信有限公司 | 应用处理装置、控制方法、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109997126A (zh) | 事件驱动提取、变换、加载(etl)处理 | |
CN102982075B (zh) | 支持访问异构数据源的系统和方法 | |
CN103714129B (zh) | 基于条件规则的动态数据结构和关系的构建装置和构建方法 | |
Zhang et al. | Research on lightweight MVC framework based on spring MVC and mybatis | |
CN107491485A (zh) | 生成执行计划的方法、计划单元和分布式NewSQL数据库系统 | |
CN106503912A (zh) | 一种数据服务系统 | |
CN104267938B (zh) | 一种流式计算的应用快速开发部署的方法及装置 | |
CN101980213A (zh) | 一种基于j2ee的数据持久化方法及系统 | |
WO2015030767A1 (en) | Queries involving multiple databases and execution engines | |
CN104731606B (zh) | 基于识别抓取技术实现企业应用集成管理的系统及方法 | |
CN109656963A (zh) | 元数据获取方法、装置、设备及计算机可读存储介质 | |
CN104504008B (zh) | 一种基于嵌套的SQL到HBase的数据迁移算法 | |
CN109241054A (zh) | 一种多模型数据库系统、实现方法以及服务器 | |
WO2023231665A1 (zh) | 分布式事务处理方法、系统、设备及可读存储介质 | |
CN109902117A (zh) | 业务系统分析方法和装置 | |
CN102222108B (zh) | 脚本处理方法和脚本处理装置 | |
CN104182228B (zh) | 一种创建网络应用的方法和系统 | |
US20130031139A1 (en) | Multi-input, multi-output-per-input user-defined-function-based database operations | |
CN108021461A (zh) | 提升社交圈子数据处理性能的方法及装置 | |
CN103152433B (zh) | 一种分布式服务端的使用、交互和请求处理方法 | |
CN112667733A (zh) | 数据仓库数据导入方法与系统 | |
CN109144488A (zh) | 一种基于安卓系统的架构设计方法 | |
CN105446981B (zh) | 站点地图生成方法、访问方法及装置 | |
CN107358035A (zh) | 一种移动医疗数据挖掘系统 | |
CN110825775A (zh) | 一种Gaia系统中支持流数据与批数据交互的数据交换系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190104 |
|
RJ01 | Rejection of invention patent application after publication |