type
status
date
slug
summary
tags
category
password
icon
架构的作⽤
- 对于 Web 项⽬来说,他们的架构虽然⼤,但是架构设计也并没有太困难,因为有很多成熟的框架可以⽤。这些框架本身就提供了项⽬的架构,也就是说,你通过使⽤框架的⽅式,就把项⽬的架构搭建好了。
- ⽽对于 Android 开发来说,SDK 提供给我们的⽅案就已经可以写出完整的软件了。我们遵守 SDK 给我们定出的规则,已经能⽤⽐较稳定的代码写软件了。由于移动端的软件功能相对简单,所以写简单软件是不需要架构的。 但如果商业项⽬真的没有架构:
- 不同的⼈的⻛格略有不同,⼀个⼈写的代码结构,同事或者新⼈可能会看不懂;
- 当项⽬越做越⼤的时候,可能会⾯临「改不动」的问题:新功能加不进去,软件结构不好调整。
- 所以虽然移动端项⽬⼀般都很⼩,但是有⼀个稳定的架构,对商业项⽬还是有好处的。
MVC 和 MVP 到底有什么区别
MVC :Model–view–controller MVP :Model-View-Presenter
- 实际上,MVP 和 MVC 并没有什么区别;⽽很多⼈所推崇的 MVP,其实才是 MVC。本身 MVC 就是⼀个宽松的概念,没有精确到分毫的严格规定。换个思路,我把 MVP 的 Presenter 这个类,改名叫 Controller,它应该叫 MVC 还是 MVP?(⽆所谓的啦)
- 换句话说,它们其实全都是 MVC 世⼈对于这些框架的理解其实都不⼀样的,但对我们来说,最重要的是要知道⼈们的观点是什么样的(这个⽅便我们和别⼈讨论),以及 MVC 和 MVP 架构的优势和实现⽅式到底是什么(这个⽅便我们做事)。 优势:就是逻辑的独⽴; 实现⽅式:课堂⾥已经演示过。
- MVP:
- M、V、P 之间双向通信。
- View 与 Model 不通信,都通过 Presenter 传递。Presenter 完全把 Model 和View 进行了分离,主要的程序逻辑在 Presenter 里实现。
- View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter 非常厚,所有逻辑都部署在那里。
- Presenter 与具体的 View 是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持 Presenter 的不变,这样就可以重用。不仅如此,还可以编写测试用的 View,模拟用户的各种操作,从而实现对 Presenter 的测试–从而不需要使用自动化的测试工具。

- MVC:MVC 流程一共有两种,在日常开发中都会使用到。

- 记住:把所有业务逻辑和界⾯更新操作都写进 Activity 的写法不叫 MVC。
MVVM 是什么
Model-View-ViewModel

MVVM 就是⼀个加了数据的 MVP(或者 MVC)。
什么是数据绑定:
- 外部数据(数据库数据、⽹络数据)、内存数据(Java 代码中的变量)、表现数据(界⾯中展示的数据)中的外部表现数据和内存数据互相⾃动更新。
- 另外,MVVM 有时候还可以给你的内存数据和数据库数据做关联监听,让你的这三种数据实现进⼀步的联动。
MVVM 和 MVC、MVP 在定位上的区别
- MVC MVP 的架构性质更强:它提供设计规范
- ⽽ MVVM 是⼀个框架,像⼀个库:它提供数据绑定的功能特性
MVVM 和 Android Jetpack
和 MVVM 相关的 Jetpack 组件是 DataBinding,⽽不是 ViewModel
MVVM 中,其中实现 VM 的工具是 DataBinding

MVI 是什么
培养架构思路的关键
- ⼀个字:拆
- 要在项⽬⾥⾯培养,⽽不是看别⼈的⽂章。
个人总结:
MVC:起源于 web 服务器上的 MVC 架构,应用到 Android 上,比较极端的情况就是xml 布局作为 V,Activity 作为 C,接收 V 层的用户事件,并处理,操作 M 层(极端情况M层也是 Activity )的数据,返回给 V 层,当界面逻辑复杂后,作为 C 层的 Activity 就臃肿起来,不好维护。
有些情况下会提取出来一个单独的C层,处理事件和数据,这就向MVP进行转变了。
于是有人尝试把 Activity 中的控制逻辑提出来一个单独的P层,作为主持人, Activity 只负责传递/发送(这里身份发生改变,现在的 Activity 就是 V 层了)用户操作,P 层就负责接收V层发送过来的操作,联合 Module 层进行处理处理,处理后的数据就调用 V 层的界面更新方法把数据渲染到界面上。
这个过程可以提取出很多复用的逻辑,比如 V 层界面更新的逻辑,P 层事件处理的逻辑,这些可以抽出来上层的接口,也方便测试和维护。
随着前端的响应式的,单向数据流的模式兴起,Android 上也有些人实现了数据改变自动刷新界面的逻辑,这种逻辑差不多,官方也推出 DataBinding 这种模式,于是在 MVP 的基础上,使用 DataBinding,就可以称为 MVVM。
MVVM 其实算不上一个架构,只是 Android 提供一个便捷库,方便做数据的双向绑定。
随着时代的发展,有一种模式被推出,MVI,MVI 中的 V 层首先需要设计出内部 View 可能的状态,定义出 UI State ,View 层会主动根据 UI State 的改变进行刷新。而V层通过发送 Intent(意图),告诉M层做出数据改动,M 根据 Intent 改动,创建新的 UI State,进而更新View,这其中在M和V层通过 State,V 和 C(数据处理层,通常是 ViewModel )层通过 Intent,就严格商定了单向数据流中各个层的通信“协议”,使得程序逻辑更加严格,出现问题定位也更加方便。
- 作者:shuouyang
- 链接:https://notion-tree.vercel.app/article/123c202e-912d-45b0-a7c1-56a507da2d05
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。