首页   

T-MVP:泛型深度解耦下的MVP大瘦身

Android博客周刊  · android  · 7 年前

温馨提示:

微信公众号做了超链接限制,有兴趣的小伙伴可以直接到

www.androidblog.cn

或点击文章末尾"阅读全文"里进行查看

注意 【招编辑和分享讲师,有意者公众号留言】



作者简介:

本文作者  North_2016

本文原地址:http://www.jianshu.com/p/b49958e1889d

文章源自网络,如果涉及侵权等问题,请第一时间联系我们予以下架





话不多说,先上图:


T-MVP架构图

下面,看看如何利用泛型把我们从繁杂重复的劳动中解救出来。

后台接口用的是LeanCloud的REST API,数据通过Node爬虫从网页上获取,先爬出十个页面的列表,然后每一个列表爬进去获取文章详情。爬虫代码见app.js。(建议替换成自己申请的appId和appKey)。

1、页面分层结构

宗旨:纯粹界面操作交互,不需要MP参与的行为,尽量V自己做,保证MVP职责清晰,P只有干净简洁的协助VM的业务逻辑操作,M只处理数据操作。


登录契约类

相比谷歌官方Contract类,多了一个Model,用于将P中繁杂的数据操作分离解耦,让P层变得简洁明了,只处理M和V相关操作即可,登录Present的全部代码:


登录Present的全部代码

RxManage用于管理订阅者、观察者、以及事件。(详见代码)
例如:
发送事件: 
mRxManage.post(C.EVENT_LOGIN, user);
接收事件:mRxManage.on(C.EVENT_LOGIN, arg ->mView.initUserInfo((_User) arg));

LoginModel的全部代码:


LoginModel的全部代码

抽离出Model不仅各层更加分工明确便于Model的复用,而且大大简化了Presenter的代码量,让P层更简洁更专注。职能清爽,一目了然。

2、列表页

例如一个列表页,用户关心的,只有列表的Item展示:

mTRecyclerView.setItemView(ItemView.class);

不需要在当前页面写网络请求,不需要写下拉刷新和分页加载更多的回调,不需要写任何Adapter,只需要这一句即可。因为用泛型在TRecyclerView里面写过抽象层的操作,将监听和数据的获取封装成通用模板,从此可以一劳永逸了。

比如,分页加载的封装操作:


TRecyclerView部分代码

对于有HeaderView的List也一样:

mTRecyclerView.setHeaderView(HeaderView.class).setItemView(ItemView.class);

ViewHolder也是相当简洁的写法:


ViewHolder

至此,项目可以永远告别OnRefresh ,onLoadMore ,Adapter。

3、项目结构

利用泛型封装的一些Base类,总代码不超过1000行,也是T-MVP的核心:


T-MVP项目结构])X{FRT]K9SMSZ}CY.jpg

T-MVP利用泛型解藕和高度抽象封装之后,相较于传统MVC和MVP代码量大大精简,架构的代码量也是精简至极:

例如BasePresenter的全部代码:


BasePresenter的全部代码

二、T-MVP的目标

//TODO
  • 1 整理Base类,吸纳意见之后,继续优化封装,将简洁进行到底。让MVP不再背负繁杂的名声。

  • 2 发布到github

  • 3 争取发布到jcenter

正在做:

  • 1 添加持久层数据存储realm

  • 2 recyclerview支持多种LayoutManager (GridLayoutManager StaggeredGridLayoutManager),支持多头部,多列表类型,多底部。

  • 3 添加fragment的MVP,同时也解决了一个页面需要多个P的问题

  • 4 尽量把反射去掉,免得有人抓住把柄说性能不好

  • 5 把框架部分隔离出来,单独做成Library

  • 6 用apt自动帮我们生成一些黑科技代码,达到事半功倍的效果

三、进度

  • 1登录、注册

  • 2列表分类

  • 3文章详情 文章评论列表

  • 4用户中心 用户评论列表

  • 5更换头像

  • 6用户列表

项目截图:






 




 



------------------------------  End  --------------------------------


精选文章:

View事件体系    面试遇到的那些坑    Android密钥保护和C/S网络传输安全理论指南

随机洗牌算法     Android增量编译    由模块化到组件化(一)    一致性Hash算法

Android应用耗电量分析与优化建议    我不是不同意你的看法,而是受不了你说话的样子

仿京东手势解锁    开发人员一份技术简历写好很重要


往期周刊:

50期    |    49期    |    48期    |    47期    |

46期    |    45期    |    44期    |    43期    |    42期    |    41期    |    40期    |    39期

38期    |    37期    |    36期    |    35期    |    34期    |    33期    |    32期    |    31期

30期    |    29期    |    28期    |    27期    |    26期    |    25期    |    24期    |    23期

22期    |    21期    |    20期    |    19期    |    18期    |    17期    |    16期    |    15期

14期    |    13期    |    12期    |    11期    |    10期    |    09期    |    08期    |    07期

06期    |    05期    |    04期    |    03期    |    02期    |    01期    |



-----------------------------------------------------------------------------------------

自动回复:

公众号已做了自动聊天回复功能,大家可以用以下关键词进行挑逗。

网站QQ群代言人福利1-47(最新期数)之间任意数字最新文章 等!


温馨提示:

微信公众号做了超链接限制,有兴趣的小伙伴可以直接到www.androidblog.cn

或点击文章末尾"阅读全文"里进行查看

推荐文章
X-MOL资讯  ·  【催化】兰亚乾教授课题组Angew. ...  ·  1 年前  
第一财经YiMagazine  ·  新年好❤️  ·  2 年前  
© 2022 51好读
删除内容请联系邮箱 2879853325@qq.com