Android架构模式详解之MVC

Android 主流架构演进

在代码编写的初级阶段,我们更多的是把注意力放在对产品功能的实现上,导致我们的逻辑代码和界面代码混杂在一起,刚开始可能感觉每什么,可是当项目越来越大,需求越来越多,耦合度越来越高,我们会发现项目的维护越来越困难。
我们需要学习新的东西,来解决当前项目的高耦合便于后期的项目维护。Android 的架构设计可以解决困扰我们的问题。设计架构的目的就是为了在程序上为后期的开发与维护,使程序模块化,做到模块内部的高聚合和模块与模块间的低耦合。在团队方面也使我们的业务组的开发者们便与进行快速开发,提升团队的工作效率。
拿公司来举例子,公司分有财务部、人力资源部、生产技术部等,这些部门聚在一起组成了公司,但是财务部的人员就只管理公司财务、人力资源部的负责公司人事等、生产技术部的负责公司的产品技术开发与维护等,各部门之间就是各司其职。


Android 主流框架演进图

MVC 架构

1.概念介绍

Model View Controller(模型视图控制器),用于隔离业务逻辑、数据、界面的展示,在更新 UI 时不需要对业务逻辑进行代码变更。


MVC 架构


优点:便于理解,开发快速,适合于小项目,一定程度上隔离了业务与 UI 的耦合度。
缺点:业务逻辑复杂时可能导致 Controller(Activity) 过于庞杂,不利于维护迭代,不适用于业务逻辑复杂 的中大型项目。

Model 层,处理业务逻辑数据(网络请求、数据库存取、算法操作等);
View 层,即 UI 布局,用于显示 M 层的数据结果;
Controller 层,在 Android 中一般为 Activity/Fragment,获取 View 层的数据,并向 Model 层发起请求。

2.示例说明——登录界面需求

Model 层业务逻辑编写

包含登录的数据(userName/passWord)以及网络请求。
它的登录流程:
1.输入用户名和密码;
2.点击登录;
3.通过网络请求验证是否通过,验证通过则登录成功,验证未通过则登录失败;
4.流程结束;

/**
*登录后的两种状态
*登录成功或失败后的接口回调方法
*/
public interface UserLoginListener {
    void loginSuccess();
    void loginFailed();
}
/**
*登录的方法
*/
public interface UserLoginModel {
    void login(String account, String password,UserLoginListener listener);
}
/**
*登录的具体接口实现类
*处理登录的业务逻辑
*/
public class UserLoginModelImpl implements UserLoginModel {
    @Override
    public void login(final String account, final String password, final UserLoginListener listener) {
        //这里模拟一个登录的过程
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                if ("jianshu".equals(account)&&"123456".equals(password)){
                    listener.loginSuccess();
                }else {
                    listener.loginFailed();
                }
            }
        },2000);
    }
}
UI 层界面的编写

就是一些布局文件,这里省略。

Controller 层业务逻辑编写

这里主要是 Activity 中监听按钮,点击登录的具体代码:

case R.id.btn_login:
                //业务逻辑的控制
                account = editAccount.getText().toString();
                pwd = editPassword.getText().toString();
                if (TextUtils.isEmpty(account)||TextUtils.isEmpty(pwd)) {
                    Toast.makeText(MainActivity.this,"账号或密码不能为空",Toast.LENGTH_SHORT).show();
                }else {
                    dialog.show();
                    model.login(account, pwd, new UserLoginListener() {
                        @Override
                        public void loginSuccess() {
                            Toast.makeText(MainActivity.this,"登陆成功",Toast.LENGTH_SHORT).show();
                            Log.d("info","登陆成功");
                            dialog.dismiss();
                        }

                        @Override
                        public void loginFailed() {
                            Toast.makeText(MainActivity.this,"登陆失败",Toast.LENGTH_SHORT).show();
                            Log.d("info","登陆失败");
                            dialog.dismiss();
                        }
                    });
                }

                break;

下一篇将介绍 -Android架构模式详解之MVC

posted @ 2017-04-27 12:03  天涯海角路  阅读(557)  评论(0)    收藏  举报