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

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

优点:便于理解,开发快速,适合于小项目,一定程度上隔离了业务与 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

浙公网安备 33010602011771号