初始MVVM | 青训营笔记

114 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的第4天。

随着业务的不断扩大,代码复杂度不断增高,整个项目越来越复杂是必然 的趋势,需要合理的架构来降低代码的理解成本。业务的变化不可预测,所以设计要具有合理性。

MVVM

MVVM由下面三个核心组件组成:

  1. Model: 数据层,包含数据实体和对数据实体的操作
  2. View: 界面层,对应于Activity,XML,View,负责数据显示以及用户交互
  3. 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非常厚,所有逻辑都部署在那里。