mvp-rxjava架构实现与思考


去年android的架构有点火,因为google在github上发布了官方对于android架构的事例(github地址:https://github.com/googlesamples/android-architecture)。几个月前我刚接到一个新项目的开发任务后,在研究了todo-mvp-xxx的框架后,那优雅的contract,流畅的logic handle,简明的架包结构深深迷住了我,就在那四分之一炷香之间,我做了一个我认为是最完美的的决定,I want it!

现在项目已经上线,开发工作了告一段落,是时候写篇文章说说它的好了。First,让我来简单说说这个框架到底是什么样的。关于什么是mvp,简单来讲就是mvc的变种,将模型与视图完全分离,这在android的app开发环境中意义更大,因为传统的mvc中activity或fragment做了太多工作导致太臃肿,无论是代码的复用性还是可维护性都是挑战。官方给出的框架图如下:


由上图可以看出来,它和传统的mvp框架并没有什么不同,都是通过presenter和view互相持有,不过google在每个presenter和view之间通过contract实现调用接口规范。一个东西要称之为框架,那么前提必须是它有一套规范或者思想,也就是俗称的套路,那么问题来了,google的套路在哪呢?

一、模块化编程。记得从刚开始学编程,老师就告诉我要模块化要优雅。然而这一切在android上却貌似一直是个大问题,因为经常性的一个activity就是一个模块,那还要分啥模块。。。所以我见到的android app项目基本长这样:


no,no fashion!作为一只优雅的程序猿,拒绝粗暴简单。google给的sample长这样:


貌似也优雅不到哪去。。。不要捉急,要优雅。仔细看看,我们会发现有点模块化的思想,addedittask、statistics、taskdetail、tasks能单独分包了,基本每个模块包含四个文件:activity、fragment、presenter和contract。来看看google的说明:

The use of both activities and fragments allows for a better separation of concerns which compliments this implementation of MVP. In this version of the app, the Activity is the overall controller which creates and connects views and presenters.

简单来说就是fragment作为模块化的基本单元,activity作为创建和链接fragment和对应presenter的容器。那我们来继续引申一下,view同样可以作为模块的基本单元,可以得到两点rules:

1、fragment和view作为模块的基本组成单元。

2、上层作为下层的容器(持有者),也就是activity持有fragment,fragment持有view。

在google的设计中,presenter也是由activity初始化的,而fragment和presenter的关联也是在presenter的构造函数中完成的。这么做的优点在于降低fragment和presenter的耦合度,缺点呢就是由于fragment和presenter的初始化不同步,无法精细控制presenter的数据初始化动作。而在实际的应用场景中,fragment和view与presenter基本是一一对应的,因此得到第三点rule:

3、fragment和view负责对应的presenter的创建与链接。

最终的架包如下图:


二、流式处理

rxjava作为一款异步处理框架,与mvp实在是干柴烈火,天作之合。Observable和Subscription天然对应Model和Presenter,在model中定义数据的来源并返回Observable,在presenter中进行subscribe操作,同时,在subscribe时可以随时切换线程做视图的更新。

Talk is cheap,我们来简单看一组栗子加深下印象:

presenter


model

好像没什么可讲解的,就这样吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容