一、概述
对于MVP(Model View Presenter),大家都知道是为了让Model和View完全解耦,MVC的演化版本等等。既然有这样的好处,那么就很适合于用于团队开,各自模块负责,互不干扰。相信大家对于MVC臃肿的Activity肯定看起来恶心,特别是对于项目的主Activity,如果每个人都要写几行代码,那么到了项目后期,完全是有可能随意间的一个小动作,就让整个团队加班找BUG啊。不管MVC还是MVP,其实都可以写出很漂亮的代码。那么接下来就来看看传说中的MVP模式吧。
引言就不说那么多,刚刚在网上看到一个前辈写描述得很不错,借用来表述一下:
其实最明显的区别就是,MVC中是允许Model和View进行交互的,而MVP中很明显,Model与View之间的交互由Presenter完成。还有一点就是Presenter与View之间的交互是通过接口的(代码中会体现)。
二:以下是代码块
- 业务需求:
该代码块实际上是在应用启动的时候,去请求后台接口,返回一个message。然后显示出来。
2.需求分解:
那么首先肯定要有message的Bean类了,写的很简单,只定义一个字符串。代码如下:
那么有了bean类以后,还得显示HTTP请求,这里用的get请求,具体关于HTTP的东西在这里就不做详细概述,后边会共享在源代码中。那么这两个东西都有了,那就写逻辑吧,这里要注意,MVC的实现这个逻辑简单暴力,直接在Avtivity中开一个线程,请求服务器,返回数据,展示出来,这里也就开始暴露MVP的缺点了,如果业务繁琐,需要实现很多的接口,那么代码整体看起来类就建立的比较多,针对简单的业务,反而MVC来的更直接和爽快。那么接下来就看看我们的model层吧:
感觉MVP还是很清晰很高大尚的感觉,整个接口,实现它,在getMeaasge方法中,其实就通过HTTP去访问了数据,并且将该数据返回。那么怎么就和Activity交互那,接下来就是重点了:
Model层定义了一个接口,那么View层需不需要定义接口,那么是必须的啊,代码如下:
通过这个方法,故名思议啊,就是展示消息嘛,那么在哪里展示了,光写个接口有撒意义啊,肯定有啊,Activitu来实现不就把什么问题都解决了吗。这里先不贴Activity的代码,继续先聊聊persenter,那么model和View的解决,中间的persneter其实就是个管理类了。为什么说他是管理类那,因为他需要把获取的数据展示View,说连接类也是可以的。那么该怎么连接那,代码如下:
请主要我们刚才定义的View的接口和model的实现类,model在这里有一个实例对象,但是View在这里是一个引用实例,并不是new的对象,那么我们看看从getMessgae通过这个引用实例,也就是接口,调用展示的方法,那么真正的这个引用实例的对象就会接受到改方法,猛然一看,是接口回调有木有。刚才没放Actiivty的代码,因为就是Activity继承了InfoView这类,这里的引用类就是对象实际上就是Actiivty的对象,这样的话不就把model返回的数据传递到Actiivty了吗。那么该等什么,赶紧展示把。接下来就是Activity的代码了:
Activity里边实例了persenter,传递了本身的对象,那么是不是就愉快的在一起了那。Actiivty就把彻底的用作为View了。最后想一想,这个业务需求很简单,如果直接在Actiivty里去开线程请求数据,就没有那么多类了,也很直观,所有MVC和mvp各有优点,看大家怎么悬着了。
代码上传到csdn了,不过好像还要审核。就不贴出来了,需要的自己去搜搜一下了。
第一次写博客,欢迎指正不对,知识在于分享,要是误导了哪位朋友,在这里先说句抱歉哈。