android探索之MVP

        在做android项目时,经常会听到MVP模式,那么到底什么是MVP,在这之前,我们来回顾一下MVC。

         MVC(model-view-controller)是将业务逻辑、界面、数据分离的一种设计典范。同样,MVP(model-view-presenter)也是为了界面与逻辑、数据分离的一种模式。他是MVC的演化版本。

 对应关系:

     Model对应的是业务逻辑和实体类型

     View对应的是activity(IUserView),负责view的绘制与用户的交互。

     Presenter负责完成model与view之间的交互。

     以上都是摘自网络,下面通过demo记录一下我的看法。

一个简单的登录demo(貌似官方提供的例子就是这个)

1、文件结构

         首先定义界面,LoginActivity中有两个EditText和一个Button;当我们点击button的时候需要执行登录操作。按照我以前的编码习惯,代码会如下:

login.setOnClickListener(newView.OnClickListener(){
   
@Override
   
public void onClick(View v) {
       
//TODO联网登录
   
}
})
;

        但是,当我学习了MVP以后就不会这样写,这样写可以实现想要的结果,但是这样将view与数据、逻辑全部纠缠在一起,不利于代码的维护,如果我改变了界面布局,或者增加了其他功能,就会把代码变的繁杂,而且可能对以前的功能造成影响。So,我们来看看mvp咋样做的。

        这里,需要执行联网登录的操作,定义一个Presenter,前面说过,他是负责view与model交互的桥梁,所以presenter需要有一个login方法:


        那么这个login方法具体做什么操作呢?我们执行一个登录的时候,首先要执行一个进度动画,在去执行登录的具体操作,但是我们的presenter不是UI,怎样去操作Activity去执行进度呢?这里我们就要清楚一点,presenter操作view的时候不是直接操作Activity的,而是操作UserLoginView,这里的UserLoginView是一个接口;


        这个接口里面定义了几个方法,分别是用来获取用户名、获取密码、显示进度、隐藏进度、切换到主界面、显示错误信息的。让Activity来实现这个接口,进而实现这个接口里的几个方法。当我们presenter来操作这个接口的时候,就实现了操作activity更改UI的操作。

       更改UI实现了,那么presenter是如何操作model的,作为一个登录功能,当然需要有login方法,我们定义一个接口:


         这个接口里面定义了一个登录的方法,该方法需要三个参数:用户名、密码、监听回调。这个回调同样是一个接口,当login执行完成后,通过这个监听来告诉presenter结果。


        同样,他里面定义了两个方法,成功或者失败。

        这时候,创建一个IUserLogin类,这个类的就是我们实现登录接口的类。

        创建好这个(model)登录的类,就在presenter中去操作他,当它执行完成后,返回结果给presenter,presenter根据返回的结果去操作UserLoginView来实现UI的更改,达到与用户交互的效果。

   

        demo中还有几个值得注意的地方。

        我们demo中模拟了一个登录过程,所以login中起了一个工作线程,当我们的presenter中调用了model的login返回结果后要调用view来更改UI,这时候要回到UI线程,否则会出现异常导致app奔溃。

         Demo中用到了Handler的post方法;这个方法的作用是执行完耗时操作后,返回到主线程。底层类似sendMessage机制。

到此,一个简单的MVP模式的demo就做完了,要想深入了解MVP,还需要我在工作中多实践,多学习别人优秀的代码以及编码思维。


demo下载地址http://download.csdn.net/detail/qq_34225872/9664297

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值