Android MVP框架详解

    xiaoxiao2021-03-25  51

    1、MVC与MVP

    MVC: View:对应于布局文件 Modle:业务逻辑和实体模型 Controller:控制器,对应activity 这个view能做的事情特别少,实际上布局文件的数据绑定操作、事件处理的代码都是在activity中,造成了activity像view也像controller。

    对于经典的 Android MVC 框架来说,如果只是简单的应用,业务逻辑写到 Activity 下面并无太多问题,但一旦业务逐渐变得复杂起来,每个页面之间有不同的数据交互和业务交流时,activity 的代码就会急剧膨胀,代码就会变得可读性,维护性很差。

    而当将架构改为MVP以后,Presenter的出现,将Actvity视为View层,Presenter负责完成View层与Model层的交互。现在是这样的: View 对应于Activity,负责View的绘制以及与用户交互 Model 依然是业务逻辑和实体模型 Presenter 负责完成View于Model间的交互

    MVC与MVP的区别如图所示:

    MVC中是允许Model和View进行交互的,而MVP中很明显,Model与View之间的交互由Presenter完成。还有一点就是Presenter与View之间的交互是通过接口的。

    为什么要使用MVP? 在Android开发中,Activity并不是一个标准的MVC模式中的Controller,它的首要职责是加载应用的布局和初始化用户界面,并接受并处理来自用户的操作请求,进而作出响应。随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。当我们将其中复杂的逻辑处理移至另外的一个类(Presneter)中时,Activity其实就是MVP模式中View,它负责UI元素的初始化,建立UI元素与Presenter的关联(Listener之类),同时自己也会处理一些简单的逻辑(复杂的逻辑交由Presenter处理).

    MVP优点: (1)每层各自独立,通过接口通信 (2)实现与接口分离,不同场景(正式,测试)可以挂载不同的实现,方便测试和开发写假数据 (3)所有的业务逻辑都在非UI线程中进行,最大限度减少IO操作对UI的影响

    MVP模式的应用

    通过代码模拟登录的实现过程。 model层描述和具体代码:展示在view层的数据和具体登陆业务逻辑处理的实现 LoginModel(登录接口):

    LoginModelImpl(登录接口实现类,具体的业务逻辑):

    OnLoginFinishListener(业务处理完成后回调接口):

    LoginPresenter(登录数据验证接口,连接view与model):

    LoginPresenterImpl(实现类,登录数据验证逻辑实现):

    最重要的一个类,功能: 1、完成presenter的实现。这里面主要是Model层和View层的交互和操作。(拥有View层与Model层的实例) 2、presenter里面还有个OnLoginFinishedListener,其在Presenter层实现,给Model层回调,更改View层的状态, 确保 Model层不直接操作View层。

    LoginView(操作view的一些接口,其实现是在LoginActivity):

    LoginActivity:

    layout文件:

    到处结束,参考文章:http://www.jianshu.com/p/9d40b298eca9(简书)

    转载请注明原文地址: https://ju.6miu.com/read-50225.html

    最新回复(0)