Android MVP架构(3)MVP框架的使用

上一篇中主要介绍了MVP框架的基本实现过程,Android MVP架构(2)使用注解实现一个MVP框架

那么实际过程中如何使用MVP框架呢。其实非常简单。

MVP架构的主要目的就是进行解耦,同时使各部分的代码逻辑层次分明,分工明确。鉴于这种思想,需要对功能类似的模块进行规划处理,以最基本的登录注册功能为例,需要创建的目录如图:

可以看到,对比传统的MVC架构,代码文件彷佛增加了不少,但是层次却更加分明了,通过严格的将模块分为MVP三层结构,使得拓展以及维护的可行性增加,阅读性也更加良好。

以拓展一个登录功能为例,需要执行的步骤为:

  • ILoginView 接口定义可能出现的登录结果(失败或成功)。

public interface ILoginView extends IBaseView {
    void onLoginSuccessful(String msg);
    void onLoginFail(int code, String error);
}

 

  • IUserPresenter 接口模拟用户执行登录的过程(提供账号密码)。
public interface IUserPresenter {
    void login(String username, String password);
}

 

  • Model进行网络请求的实现。
public class UserModel extends BaseModel implements IUserModel {

    @Override
    public void login(String username, String password, IResponseListener listener) {
        Map<String, String> params = new HashMap<>();
        params.put("username",username);
        params.put("password",password);
        doPost("login",params, listener);
    }

}

 

  • Presenter中调用Model层的实现,并将数据回调给View层。
public class UserPresenter extends BasePresenter<ILoginView>
        implements IUserPresenter {

    @Inject private
    UserModel userModel;

    @Override
    public void login(String username, String password) {
        userModel.login(username, password, new IResponseListener() {
            @Override
            public void onSuccessful(Result data) {
                view.onLoginSuccessful(data.getMsg());
            }
            @Override
            public void onFailure(int errorCode, String errorMsg) {
                view.onLoginFail(errorCode, errorMsg);
            }
            @Override
            public void finished() {
            }
        });
    }

}

 

  • Activity中调用Presenter,处理所实现View的回调。
public class LoginActivity
        extends MvpActivity implements ILoginView {

    EditText nameView;
    EditText psdView;

    @Inject
    UserPresenter userPresenter;
    ProgressDialog dialog;

    @Override
    protected void initView() {
        super.initView();
        nameView = findViewById(R.id.nameView);
        psdView = findViewById(R.id.psdView);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void initData() {
        super.initData();
        dialog = new ProgressDialog(this);
    }

    public void login(View view) {
        String username = nameView.getText().toString().trim();
        String password = psdView.getText().toString().trim();
        userPresenter.login(username, password);
        dialog.setTitle("正在登录。。。");
        dialog.show();
    }

    @Override
    public void onLoginSuccessful(String msg) {
        dialog.dismiss();
        Log.i(TAG, "onLoginSuccessful: " + msg);
        //User user = JSON.parseObject(msg, User.class);
        // TODO  处理返回的信息
    }

    @Override
    public void onLoginFail(int code, String error) {
        dialog.dismiss();
        toast(code + " : " + error);
    }

}

可以看到,在使用MVP架构之后,Activity的代码得到了极大的简化,开发人员可以专心的处理各个部分的逻辑功能。对于拓展,对源代码的改动降到了最小,符合开闭原则。

最后贴一下源码,有需要的小伙伴可以自行下载。资源下载

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章