我对MVP的理解

MVP模式架构
  • Model:业务逻辑和实体模型
  • View:用户交互及页面展示
  • presenter:Model与View交互的桥梁
MVP结构图

总体来说思路还是比较简单的:

  • 1、view层即我们的Activity,继承抽离出view所有操作方法的接口,并引用presenter。
  • 2、presenter调用model,执行model中具体业务逻辑。
  • 3、model执行具体逻辑,将结果回调给presenter。
  • 4、presenter继续将结果回调给view。
使用MVP模式实现简单的登录实例
项目结构
view层:(继承抽离出view所有操作方法的接口,并引用presenter)
//封装Activity所需要的方法,假设我们需要处理登录成功与登陆失败两种情况
public interface ILoginView {
    //登录成功
    void onLoginSuccess(String successMsg);
    //登录失败
    void onLoginFailed(String errorMsg);
}

Activity实现接口并引用presenter:

public class MainActivity extends AppCompatActivity implements ILoginView {
    private ILoginPresenter presenter;//presenter引用
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        presenter.startLogin();//开始登录
    }
    @Override
    public void onLoginSuccess(String successMsg) {
        //UI层接收回调:登录成功
    }
    @Override
    public void onLoginFailed(String errorMsg) {
        //UI层接收回调:登录失败
    }
}
presenter层:(调用model,执行model的具体逻辑)
public class ILoginPresenter {
    private ILoginView view;
    private LoginModel model;
    public ILoginPresenter(ILoginView view){
        this.view = view ;
    }
    //调用model,执行model具体逻辑
    public void startLogin(){
        model = new LoginModel(this);
        model.startLogin();
    }
    //将结果回调给层,因为UI持有View的引用,所以结果回调到了UI层
    public void onLoginSuccess(String successMsg){
        view.onLoginSuccess(successMsg);
    }
    public void onLoginError(String errorMsg){
        view.onLoginFailed(errorMsg);
    }
}
model:实现具体业务逻辑
public class LoginModel {
    private ILoginPresenter iLoginPresenter;
    public LoginModel(ILoginPresenter presenter){
        this.iLoginPresenter = presenter;
    }
    //登录具体逻辑
    public void startLogin(){
        if(true){
            //假设登录成功
            iLoginPresenter.onLoginSuccess("success");//结果回调给presenter
        }else{
            iLoginPresenter.onLoginError("error");//结果回调给presenter
        }
    }
}

总结

从上面的例子可以看出:使用MVP模式会使得代码多出很多接口及Presenter,但是这样使得代码逻辑更加清晰,尤其是在处理复杂逻辑时,可以将Activity每个业务都抽离成一个Presenter,这样即逻辑清晰也方便我们扩展。例子中业务逻辑很简单,使用MVP返回显现代码累赘,所以说,仁者见仁智者见智,我认为根据具体项目情况选择合理的架构模式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容