美文网首页
移动端代码模式

移动端代码模式

作者: KyneMaster | 来源:发表于2020-04-10 21:01 被阅读0次

    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);
                }
            });
        }
    }
    

    相关文章

      网友评论

          本文标题:移动端代码模式

          本文链接:https://www.haomeiwen.com/subject/bptjmhtx.html