Android MVP从懵逼到入门:登陆业务实践

比来几天在啃MVP,此刻的你大概跟几天前的我一样,对MVP仍是一脸懵逼,虽然MVP三个字母都认识,但连在一路却不大白到底是个什么东东,不妨,快来干了这碗鸡汤,立马从懵逼到入门,入不了门你来打我,文末统计人数。

起首,MVP是一种设想模式,或者说架构。Google把它列入Android Architecture Blueprints–Android 架构蓝图,本文实现的登岸功能就是按照MVP根本架构Demo来实现的。

其次,MVP从何而来?想必都晓得是MVC的演化版本,此刻比力风行,被泛博开辟者所承认。被承认的缘由我在这里总结一下:

不断以来,在MVC模式中Activity的全能脚色就备受诟病,一旦逻辑越来越复杂,Activity就越来越痴肥,承担越来越多的职责,代码阅读起来费劲,维护成本跟着提高,并且,在MVC模式中,View 和 Model间接交互,耦合度高,违背了软件开辟“高类聚、低耦合”的设想方针–于是MVP横空出生避世。

关于MVP的理论学问就哔哔这些,想要细致领会的童鞋回头本人做功课去,这里不是重点,本文的重点是把MVP模式实践起来。

这是google samples TODO-MVP项目中的MVP图解。由于本人进修MVP次要也是按照谷歌官方demo来的,所以,这个图间接拿来。这个图怎样看?

分为摆布两部门,右边没颜色的部门包含的内容是Model,这里面包含了数据实体模子、数据拜候接口、SQLite数据库操作、网路数据操作、数据内存缓存,这些都是Model要做的工作,跟MVC没什么不同;

左边…阿谁什么颜色的布景(色盲晚期),留意阿谁Activity,我们看到VIEW和PRESENTER都被放在了Activity里边,而VIEW的实现类在这里用的是Fragment;

躲藏内容:这里面其实还有一个内容–契约类,也就是项目里的XXXContract.java类,是一个接口类,感化是定义VIEW接口和PRESENTER接供词给的接口方式。这个类准绳上不属于MVP模式里的任何脚色,所以没在上图呈现,能够理解。

这其实是MVP的一个环节点,通过这个接口,View的实现类(即Fragment)就持有了Presenter的实例,于是,View就能够通过Presenter来操作Model中的数据接口了。若是你要实现MVP模式,记住,不管三七二十一,先写这个基佬,哦,不合错误,是基类。

这个方式就是间接操作Model的,好比加载数据。通过这两个基类的定义的接口就能看出,View和Model不间接交互,而是通过Presenter来操作,这是与MVC的分歧之处。

这个类是初次呈现于google的mvp示例中,以前的MVP模式并未见到,这个类定义了View接口和Presenter接口为对方的实例供给的方式。

好比,我在View中能够获取用户输入的邮箱和暗码,判断邮箱暗码能否无效,设置邮箱暗码输入框错误提醒消息,显示登岸ProgressBar等,同样,在Presenter接口中,供给了登岸和重置两个功能,用户通过View上的两个按钮,响应Presenter对应的接口,

然后,你想让View干嘛,挪用View相对应的接口就行了,想要什么数据,想对数据做什么操作,挪用Model对象的对应方式就行了;大概你曾经发觉了:

Tablet结构或者屏幕上有多个views的结构能够很好的操纵Fragments框架。

至此,MVP模式里的VP就能够运转起来了,连通起来了。下面来说说Model。若是对MVC的Model很是熟悉能够跳过。

营业逻辑需要什么样的数据实体、数据操作,在对应的包里面建立就行了,这里要提到的是,Presenter对Model的持有,这里也是通过接话柄现的,间接通过UserDataSource接口类,间接通过UserDataSource的实现类UserRepository。而UserRepository同时持有对当地数据和近程数据操作的对象:

利用MVP模式也有一些不尽如人意的处所,好比,类和接口变多了,代码也多了,项目大了可能会欠好办理,但这都不是事,用多点代码、多点类文件换取低耦合度、布局清晰、容易理解、易扩展的架构,这买卖值了。

第一遍看的时候懵逼不妨,再看一遍,当真的解读MVP的设想思绪,参考代码,发觉其实真的是很清晰的思绪,并不难,难的是啃下来的决心。这碗鸡汤我干了,你们随便。

相信看完这篇文章会对你理解MVP有所协助,若是你仍是一脸懵逼的话,请举起手来:

更多精彩报道,尽在https://www.syisy.com

发表评论

电子邮件地址不会被公开。 必填项已用*标注