android中MVP模式--此模式可以更简单地测试

来源:互联网 发布:淘宝上盐酸美沙酮片 编辑:程序博客网 时间:2024/06/05 18:08
此文转载《打造高质量Android应用-Android开发必知的50个诀窍》
这本书还不错,有很多开发中的小技巧和细节。大家可以买来看看,不贵,在当当网上价钱好像是44元。

以下为内容:

读者很可能听说过MVC(模型-视图-控制器)模式,并且已经在其他编程框架中使用过该模式。当尝试用更优的方法测试Android代码的时候,我发现了MVP(模型-视图-主导器)模式。MVP模式和MVC模式的根本区分是:在MVP模式中,视图中的业务逻辑被放入主导器中,主导器通过接口与视图交互。

下面以一个启动界面为例子,介绍这个模式。

我们会在启动界面中检查网络连接是否正常,并显示一个进度条。如果网络正常就跳转到另一个Activity。否则,就向用户显示一条错误信息。
要创建启动界面,需要一个负责在模型和视图间交互的主导器。在本例中,主导器有两个功能:一个功能用于判断网络是否连接,另一个功能用于控制视图。

主导器中会用到一个模型类ConnectionStatus,该类实现了IConnectionStatus接口,该接口中只定义了一个判断网络是否在线的方动法。

public interface IConnectionStatus {

     boolean isOnline();

}

读者可能会意识到:负责控制视图的代码位于Activity中,而且这个Activity实现了ISplashView接口。主导器会通过该接口控制应用程序。ISplashView接口的源码如下所示:

public interface ISplashView {
     void showProgress();
     void hideProgress();
     void showNoInetErrorMsg();
     void moveToMainView();

}

因为我们是在Android平台上开发应用程序,因此首先需要创建视图,然后我们会把视图的控制权交给主导器。代码如下:

public class SplashActivity extends Activity implements IsplashView {
     private SplashPresenter mPresenter;

     @Override
     public void onCreate(Bundle savedInstanceState) {
          mPresenter = new SplashPresenter();
          mPresenter.setView(this);
     }

     @Override
     protected void onResume() {
          super.onResume();
          mPresenter.didFinishLoading();
     }

}

首先,需要初始化Activity,然后创建用于完成所有交互操作的主导器,并将当前Activity设置给主导器;最后,重写onResume()方法,通知主导器当前视图已经准备完毕,可能把控件权交给主导器了。

主导器的代码比较简单,其didFinishLoading()方法的源码如下所示:

public void didFinishLoading() {
     if(mConnectionStatus.isOnline()) {
          view.moveToMainView();
     } else {
          view.hideProgress();
          view.showNoInetErrorMsg();
     }
}


以上为书中的文章,由于此书并没有给出完整的源码。所以,我根据我的理解做了一个小demo,如果有错误不合理的地方,请大神们指出。

这博客怎么上传文件呀。。。真蛋疼。。。

0 0
原创粉丝点击