从0开始写一个App(一)关于 Android MVP

前情提要:前一篇文章写道,本人目前两年半工作经验,就职于手机公司,做过framework,做过整个系统的主题样式,控件等。做过原生App。长期与源码打交道,.mk编译的那种。就今年才正儿八经开始用IDEA工具进行开发,真香,好用。

这也导致了我根本不怎么会上层的app开发,更不知道互联网应用具体是个什么样子的,三方框架基本没用过。为了打破这种僵局,准备写个互联网类型的app。用上流行的框架。MVP+Dagger2+Retrofit+Rxjava+Dagger2+jetpack等。先挨个分析清楚,然后动手写APP。


先来说说MVP吧,(本次MVP全部拿计算1+1来讨论,简洁明了)网上很多关于MVP架构的文章,个人挺喜欢用MVP,代码简洁,耦合度低,方便维护。给我的感觉缺点就是比较冗余,因为要写多个presenter,model。新人看了一脸懵逼,点进去全是接口

这里就不讨论传说中的MVC了,因为MVC是啥我也不知道。O(∩_∩)O.....

以下全是个人总结出来的见解,请大佬海涵。

各层的功能职责,用下面的一张图来表示,就是做一个最简单的加法,画的有点丑哈。因该都看得明白,主要利用回调机制

最简单的MVP流程图

MVP有这几个版本,其实核心一样的,封装不同而已

1.最原始的MVP

2.加入Contract的MVP

3.加入动态代理的MVP

一:先来说说最简单的一种MVP  新手都是从这种看起的,这里拿一个最简单的加法计算来讨论。所有流程上面的图就可以概括,结合上面的图来看,很清晰的。

敲黑板:这种方式很少用了 个人感觉太Low了,没得牌面。写代码就是为了让别人看了觉得高大上的。

这里仅仅阐述原理,核心就是这个,明白了原理接下来的两种MVP就很清晰了

比如你的Activity里面有一个View负责输入数字。分包如下

包结构


View(activity)


View接口
Presenter


model


model接口
结果

PS:其实在Activity里面直接new Presenter 是不符合规范的,增加耦合,可以用Dagger2依赖注入的方式,这里不做讨论,仅仅看MVP的流程

看完上面的先来张图放松一哈,你就当做是我就行了,这样看的更有激情

二:加入Contract的MVP

上面的MVP核心弄清楚之后,继续看加入Contract的MVP  我们继续来研究1+1.....

这里加入Contract 契约类。这是Google推荐的MVP方式。Google在GitHub上发布的demo链接:

GitHub - googlesamples/android-architecture at todo-mvp

这是一个类似于记事本的demo,较为复杂,这里还是拿1+1来讨论

如果是初学者,建议先去看下Java泛型机制,推荐一个链接:java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一 - little fat - 博客园

Google推荐把Presenter和View接口放在一起。放在Contract契约类中,这样逻辑更加的清晰。

继续改造上面的1+1Demo。

之前Presenter直接new出来的,并没有抽出接口,通过View接口注入进去

这里说的比较抽象。再来一张图吧。估计看此文的大部分是新手,稍微有点绕哈,尽量通俗易懂,不搞花里胡哨的名词


加入Contract

这里详细说明一下。之前Presenter是通过直接new出来的,现在给Presenter实现一个接口IPresenter,和View的接口放进一个契约类里面,并且加上一个基础接口BasePresenter和BaseView。

给presenter加接口的目的就是为了降低耦合,代码结构更加清晰

BasePresenter和BaseView。做的一些项目里面公共的功能,抽进去,然后Presenter实现IPresenter,然后不再new出mPresenter,而是在初始化的时候通过view的接口把presenter对象直接注入进Activity。这样得到的mPresenter再去调用add方法,add 定义在IPresenter接口里被Presenter重写,这样符合MVP独有的“点进去都是接口”的特点⊙﹏⊙‖∣。。。完事后继续调用model计算1+1,再通过view回调结果给界面。

这里的接口实现接口有点类似于Adapter设计模式 在Framework用的比较多,这里不做拓展,有兴趣的可以百度下

代码结构如下,

包结构


view(Activity)


契约类


基础的Presenter接口


View的基础接口


presenter媒介

model层没做改动,就不贴了。

然后是计算结果

结果

然后按照惯例,看一波美女。

图片发自简书App

第三种动态代理的MVP架构先不写了,过几天补充上来,因为半夜了,又饿又困。明天还要上班。希望能一直写下去,过几天继续更新,谢谢各位老哥的捧场,跪谢了,砰砰砰......

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

推荐阅读更多精彩内容