这是我参与「第四届青训营」笔记创作活动的第4天。
随着业务的不断扩大,代码复杂度不断增高,整个项目越来越复杂是必然 的趋势,需要合理的架构来降低代码的理解成本。业务的变化不可预测,所以设计要具有合理性。
MVVM
MVVM由下面三个核心组件组成:
- Model: 数据层,包含数据实体和对数据实体的操作
- View: 界面层,对应于Activity,XML,View,负责数据显示以及用户交互
- ViewModel: 关联层,将Model和View进行绑定,Model或者View更改时,实时刷新对方/
View只做和UI相关的工作,不涉及任何业务逻辑,不涉及操作数据,不处理数据。UI和数据严格的分开 ViewModel只做和业务逻辑相关的工作,不涉及任何和UI相关的操作,不持有控件引用,不更新UI/
一个简单的实例
public class StringTextViewPresenter extends Presenter {
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent) {
return new ViewHolder(new TextView(parent.getContext()));
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, Object item) {
String str = (String) item;
TextView textView = (TextView) viewHolder.mView;
textView.setText(item);
}
@Override
public void onUnbindViewHolder(ViewHolder viewHolder) {
}
}
MVC
MVC模式将应用程序划分为三个部分:
● Model: 模型(用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法)
● View: 视图(渲染页面)
● Controller: 控制器(M和V之间的连接器,用于控制应用程序的流程,及页面的业务逻辑)
MVC特点:
MVC模式的特点在于实现关注点分离,即应用程序中的数据模型与业务和展示逻辑解耦。在客户端web开发中,就是将模型(M-数据、操作数据)、视图(V-显示数据的HTML元素)之间实现代码分离,松散耦合,使之成为一个更容易开发、维护和测试的客户端应用程序。
MVP
MVP是把MVC中的Controller换成了Presenter(呈现),目的就是为了完全切断View跟Model之间的联系,由Presenter充当桥梁,做到View-Model之间通信的完全隔离方向。
MVP特点:
● M、V、P之间双向通信。
● View 与 Model之间不通信,都通过 Presenter 传递。Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现。
● View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。