如何应对Android面试官 -> 玩转 MVx(MVC、MVP、MVVM、MVI)

前言


image.png

本章主要基于以下几个方向进行 MVx 的讲解,带你玩转 MVx;

MVC、MVP、MVVM、MVI 它们到底是什么?


分文件、分模块、分模式

一个文件打天下

为什么不要用一个页面打天下?

页面是给用户看的,随着版本的迭代,页面上的交互需求也在不断的变化,导致页面不断的在修改,页面在不断的修改,那么这个文件中就不能放太多的代码,否则导致后续迭代起来就很困难;

页面很复杂怎么办?

一个复杂页面,也是由一个一个的 View 组成的,那么我们就可以将 View 拆成自定义 View。同时将这个 View 的相关逻辑,拆分到对应的逻辑处理层;

应用开发原则

  • 遵循面向对象的SOLID原则;
  • 视图、数据、逻辑分离;

六大原则

image.png

  • 单一职责

一个 class 完成一件事情;一个 class 只做一件事情,当有更多事情的时候,使用继承,那么就引申出了『开闭原则』;

  • 开闭原则

对继承开放,对修改关闭(不能改变基类中的逻辑);多个类文件完成多件事情的时候,使用继承,对文件尽量不做修改;

  • 里氏替换原则

子类覆写父类函数的时候,不能改变父类的逻辑;例如:「基类车 有一个 run 方法,子类覆写之后不能改成 fly 方法」

  • 依赖倒置原则

不依赖实现,只依赖接口;「例如车在路上跑,车不应该依赖路的具体实现,而是一个路的接口」;

  • 接口隔离原则

接口的粒度要小,接口的最小化;『例如,人和路的接口要分别定义,而不是定义成一个接口』;

  • 迪米特原则

最小支持原则;

视图、数据、逻辑分离

从静态角度的一个分离,以及生命周期的控制,数据需要在什么情况下进行销毁;

App 架构设计

image.png

整体遵循一个 层次化、模块化、控件化;

而模块化又可以细分成:组件化、插件化;

MacHi 2024-06-05 20-48-18.png
image.png
组件化一般针对的都是业务组件,业务组件之间互相不依赖,公共部分抽象成接口,下沉到通用组件;组件化的意义是通过 App 模块把这些组件拼装起来,组装成一个 APK,这种就是在编译期间,它们是一个一个的组件;

而插件化,本质上可以理解为,把这一个一个的组件打包成一个一个的无图标的 APK,然后通过后下载的方式集成到应用中,以此来缩小安装包的体积;

MVx

在 MVx 中,这个 M 基本都是一样的,V 的角色其实是有一些差异的;

MVC

数据层、视图层、控制层(逻辑层)如何定义?

image.png

  • 数据层

对数据 + 对数据进行的操作(不依赖视图的操作);例如我们利用 RxJava 对数据进行变换的操作,map、flatMap等等,放到 model 层执行;

  • 视图层

不同的模式有不同的定义,在 Android 中就是 Activity + xml + fragment;

  • 控制层

view 和 model 之间的通信和交互;

在 Andriod 中 xml 布局的功能性太弱, Activity 实际上负责了 View 层与 Controller 层两者的工作,所以在 Android 中 MVC 更像是这种形式,而 Model 层好多人直接把 bean 写在了 model 下,它俩并不能完全相等;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值