移动端代码模式

MVP

概况

  1. 发展史
    • 最初Android的开发模式是MVC,这个模式可以延伸到上世纪70年代,但是这个结构的可维护性低,解耦性低,代码冗余,逻辑和控件的处理都在View层,其实就是一个类完成一个功能
    • 上世纪90年代,引入了MVP模式,也是现在大厂主要的开发模式,从MVC转变而来,意在弥补MVC的缺陷
    • 2005年引入MVVM,将V进一步分离
  2. MVP
    MVP属于三层分层架构。意在将数据和View真正意义上的分离,以及对V层的解耦,简单理解为将逻辑分离。
    移动端MVP最完美的形式,就是被颂扬的clean架构( The Clean Architecture),但是对于咱们现在的业务,以及我的能力,做不到绝对深入的解耦clean。


    image.png

MVC实例

  1. view
public class LoginActivity ex Activity{

    private Login login;
    private EditText username;
    private EditText password;
    private Button loginBtn;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        username = findViewById(R.id.username);
        password = findViewById(R.id.password);
        loginBtn = findViewById(R.id.login_btn);
        loginBtn.setOnClickListener(new OnClickListener{

            private void onClick(View v){
                // 获取用户名、密码
                // 上传
                // 返回结果
                // 验证角色
                // 缓存信息
                ...
            }
        });
    }
}

MVP实例

  1. ILoginView接口
public interface ILoginView {
    /**
     * 从UI中获取用户输入的用户名
     *
     * @return
     */
    String getUsername();

    /**
     * 从UI中获取用户输入的密码
     *
     * @return
     */
    String getPassword();

    /**
     * 跳转页面
     *
     */
    void startMainView();

}
  1. ILoginPresenter接口
public interface ILoginPresenter {
    /**
     * 登录
     */
    void login();
}
  1. ILoginModel接口
public interface IUserModel {
    /**
     * 登录
     *
     * @param username 用户名
     * @param password 密码
     * @param callback 回调
     */
    void login(String username, String password, Callback callback);
}
  1. UserModel
public class UserModel implements IUserModel {

    //单利
    public static UserModel getInstance() {
    }

    @Override
    public void login(final String username, final String password, final Callback callback) {
        //网络处理
    }
}
  1. LoginActivity
public class LoginActivity extends BaseActivity<LoginPresenter> implements ILoginView {

    private EditText username;
    private EditText password;

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

    private void bindView(){
        username = (EditText) findViewById(R.id.username);
        password = (EditText) findViewById(R.id.password);
        findViewById(R.id.login).setOnClickListener(this);
    }

    @Override
    public LoginPresenter onCreatePresenter() {
        return new LoginPresenter();
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.login:
                getPresenter.login();
                break;
        }
    }

    @Override
    public String getUsername() {
        return username.getText().toString().trim();
    }

    @Override
    public String getPassword() {
        return password.getText().toString().trim();
    }

    public void startMainView(){
        ARouter.getInstance().build("/main/view").navigation();
    }
}
  1. LoginPresenter
public class LoginPresenter implements ILoginPresenter {

    @Override
    public void login() {
        UserModel.getInstance().login(getView.getUsername(), getView.getPassword(), new Callback() {
            @Override
            public void onSuccess() {
                getView.startMainView();
                //当然正常情况这里还需要做其他的处理,验证角色、缓存信息、保存数据库等等
            }

            @Override
            public void onFailure(String errorMsg) {
               MessageUtils.getInstance().show(errorMsg);
            }
        });
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容