- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android架构系列-基于MVP创建适合自己的架构
Android架构系列-基于MVP创建适合自己的架构
1 为什么选择MVP
MVP架构是当前比较成熟的Android架构,还有其他架构比如最初始的MVC和MVVM。MVC相对于较为落后,MVVM使用DataBind,普及性不如MVP。所以最终决定自己设计的框架是基于MVP思想进行总结的框架。
选择MVP框架的原因之一也是google官方的示例中MVP sample已经是完成,证明google官方对于MVP的承认度。
官方项目地址: HYPERLINK /googlesamples/android-architecture \t /p/_blank /googlesamples/android-architecture
一个较为详细的官方项目源码解析的文章: HYPERLINK /cn/articles/android-official-mvp-architecture-sample-project-analysis \t /p/_blank /cn/articles/android-official-mvp-architecture-sample-project-analysis
2 MVP简介
具体的MVP架构相关文章网上已经非常多了,具体的可以自行查找。MVP的存在主要是由于普通MVC架构会导致项目中activity过于臃肿,当项目越来越大后,代码可读性大大降低。
MVP的思想是将activity作为view层,只负责与xml的渲染和监听事件,具体处理数据逻辑放到一个新定义的Present层。减少了 activity负责的事情。并且可以强迫开发者养成分模块功能开发的思想。开发前设计好功能模块,而不是像以前一样写流水账一样写代码。从头写到尾。
MVP
3 我的总结
自己根据MVP的思想和一些好的源码总结了一套适合字的框架。真正的架构是依赖义务存在的,所以建议大家能总结出适合自己项目的代码。
3.1 目录分配
在目录分配上决定采用根据功能模块进行划分,而不是所有activty在一个目录的方法。类似google的例子:
目录
原因几点:
功能模块划分更为清晰,对于以后代码阅读和新人接手更好
适用于模块化开发,比如以后又是一个新项目,老项目的登录模块、用户模块、论坛模块等待可以整个复制出来重用
虽然网上提过按照多个模块划分可能会有公用的页面。我认为复制一份也没什么,不会造成很大的冗余代码,并且对于页面来说万一以后某个模块页面有自定义修改不会对其他影响。(毕竟页面的灵活性要求很高,不适合架构抽出来通用的)
需要抽出来的独立于功能模块的应该是common_util 和 common_widget,分别是通用工具层和通用自定义控件层
具体例子分配如下:
Sample目录
GloabApp 全局Application
RootAct 启动页面
Base目录 基础activity fragment存放
util目录 通用工具
mywidget 通用自定义控件
SampleModule Sample功能模块。里面包含独立的MVP的接口
3.2 Model层
Model层中又可以分为Api层和Cache层。
3.2.1 Api层
主要是网络获取数据信息等接口。
使用了自己二次封装过的Retrofit+Okhttp+Gson组合。详细可以参见文章: HYPERLINK /p/283d1a7a0aff \t /p/_blank /p/283d1a7a0aff
示例SampleApi:
public class SampleApi extends BaseApi {
private static final String mBaseUrl = /;
private ApiStore mApiStore;
public SampleApi() {
super(mBaseUrl);
mApiStore = mRetrofit.create(ApiStore.class);
}
/**
* 获取xxx数据
* @param uid
* @param callback
*/
public void getSampleInfo(String uid, ApiCallbackGetSampleInfoRet callback) {
CallGetSampleInfoRet call = ((ApiStore)mApiStore).getSampleInfo(uid);
call.enqueue(new RetrofitCallbackGetSampleInfoRet(callback));
}
文档评论(0)