MVP设计模式初步学习

来源:互联网 发布:地税局数据采集手续 编辑:程序博客网 时间:2024/06/03 13:05

本问出自:http://blog.csdn.net/dt235201314/article/details/52048608

一丶百度百科

MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。

MVC和MVP的区别?

作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。

在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。 在MVC模型里,更关注的Model的不变,而同时有多个对Model的不同显示,即View。所以,在MVC模型里,Model不依赖于View,但是View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。

二丶白话慨述
view(客户),presenter(产品狗),model(程序猿)。
有一天,客户找到了产品狗说:“我要开发一个像微信一样的App”
然后,产品狗原封不动地转达了给程序猿,程序猿默默地说了一句:“傻X,有病”。
当然产品狗也不会这么傻,它当然要在客户面前夸他,于是在电话里头说:“我们的工作人员,对此表示有挑战性,但是他们很乐意。”
于是新需求就来了,最终苦逼的还是程序猿。
终于,程序猿受不了了,辞职了,但是又来了一批新的,需求还是需求,并不会因为人不同了,就推掉这单生意(重构项目)。

view(客户),contorler(产品狗),model(程序猿)
有一天,客户找到了产品狗和程序猿说:“我要开发一个像微信一样的App” 
程序猿默默地说了一句:“傻X,有病”。 
嗯,打起来了,项目没了。

通过这么深刻的故事,我们看到了MVP的优点
1.view和model相互不认识(解耦),并不会因为model不一样了,而影响了view,反过来也一样。那么model什么时候会变呢?例如,老子原来用的是Volley网络框架,但是我现在要换成OKhttp。没关系,我只需改动model即可。
2.model是面向接口文档编程的,view是面向设计图编程的,而presenter是负责协调的,这样就可以并行开发了。
3.测试,因为是view和model不认识(解耦),那么就可以单独地对model进行测试,验证它的准确性。做好了view,真机调试,又可以发朋友圈了。最后用presenter连起来,如果测试得好,Bug也会少很多。
4.做不好不用背锅,还可以多踩一脚(O(∩_∩)O~)。我做model的,数据给你了,你显示那么丑......这是一个后台跟App的故事。
5.presenter(产品狗),可以同时面对多个view(客户),做更多的事情(累死更多的程序猿)。
MVP的缺点
1.presenter负责逻辑,代码会多。(产品狗确实挺累的)
2.写得很累,明明view跟model可以直接相连,非要跟presenter联系,可能在传递时出现Bug。(明明程序猿可以跟客户面对面沟通,但是经过了产品狗,回来的需求就不一样了)
三丶小案例参考
http://blog.csdn.net/knxw0001/article/details/39637273/

MVP开发攻略套路

model层


model开发一条龙

这是我开发的套路,希望你们喜欢。正常情况下,3天就能完成所有的接口文档对应的model。而在做model的时候,面对的是接口文档,没有比这个东西更接近需求了,因此,你做完之后会更加明白这个项目。

用Rxjava+Retrofit是什么体验


直接生成Bean对象

view层


view开发一条龙

简单但是暴力。我还有隆重地为大家推荐几款插件。

1.SelectorChapek for Android(自动生成Selector的XML文件),再也不要考虑那些乱七八糟的press,focus,normal

2.jimu Mirror(不需要写代码,就能在真机显示布局,包括列表),神器!加快了朕发朋友圈的速度。

3.butterknife(依赖注入库,自动注解布局中带@+id的控件),用完就更model的同学说,真慢!

4.Android studio自带的Get,Set生成器。

presenter层

Sept1

根据model的所需参数创建外部调用接口(presenter的方法接口)

Sept2 

实现Sept1中的接口和model层提供的回调接口

Sept3

根据业务逻辑,调用view层提供的方法。


四丶大神文章

Android官方MVP架构示例项目解析

Google Android MVP Pattern 知识整理

Android MVP模式 简单易懂的介绍方式

如何设计MVP中的Presentation层

1 0
原创粉丝点击