# MVC / MVP /MVVM


### 是啥

是三种不同的架构, 但其实 Google 官方并没有给出这三个词的明确定义, 我这里只是结合民间普遍定义对其进行解释

####  MVC

- `Model`: 业务逻辑和数据源
- `View`: 视图, 在 Android 开发中主要指 XML layout 文件, 也包含 Activity/Fragment 处理交互
- `Controller`: 通常指 Activity/Fragment

#### MVP

- `Model`: 数据源
- `View`: 指 Activity/Fragment 用于给用户展示和处理交互
- `presenter`: 通过 Model 存取数据, 连接 View 和 Model

在实际开发中, 我们可以用接口来定义一些规范, 然后让我们的 View 和 Model 实现它们, 并借助 Presenter 进行交互即可

#### MVVM

- `Model`: 数据源
- `View`: 指 Activity/Fragment 用于给用户展示和处理交互, 会驱动 ViewModel 从 Model 获取数据
- `ViewModel`: 将 Model 和 View 进行关联, 当获取到数据之后, 会通过绑定(如DataBinding)刷新界面

##### MVVM 特点?

- 低耦合：View 可以独立于 Model 变化和修改
- 可重用性：多个 View 可以共用一个 ViewModel
- 独立开发：开发人员可以专注于业务逻辑和数据的开发(ViewModel), 设计人员可以专注于页面设计
- 可测试：界面测试可以针对 ViewModel 来写
