Android 需要哪些架构手段(二)

简介: 关于 Android 的架构问题,想必大家都听说过 MVC、MVP 和 MVVM ,且当下又出现了更新的 MVI。诸如此类的这些架构,都是我们日常所在使用的。

MVX

这里说的 MVX ,是 MVC、MVP、MVVM 的统称,我们在这里暂不介绍 MVI ,大家可自行了解。

MVC

MVC:视图+控制器+模型。其中视图(View)接收到用户的操作,继而调用控制器(Controller)来控制模型,模型(Model)处理数据后就会更新UI。

其中,View 指的是 XML 布局,Controller 由 Activity 承载,Model 是提供接口给 Controller 层处理数据的类,同时 Model 层在处理好数据后会通知更新 UI。

这个架构中,很好的将数据和控制器分离,让各自的分工和操作更加的简便。但是 Model 层和 View 层没有很好的解耦,以及 Controller 层与 View 层之间却还是有耦合的,当视图的控制逻辑变多的时候,控制层就会变得很臃肿。

1.webp.jpg

MVP

为解决 MVC 中出现的问题,出现了 MVP 架构,其解决了 C 层和 V 层的耦合问题。

在 MVP 中,将控制器(Controller)换成显示器(Presenter),让 P 层充当 V 层和 M 层的中间人,让 P 层来控制这些交互逻辑。这样子,Activity 就不会很臃肿,数据和视图也完全解耦了。但是同样的,其控制回路会变得很庞大,我们就需要加重去维护 P 层了。

而通常情况下,我们会使用接口类,利用抽象来做 V 层和 P 层的连接。但同时,也会使得类的数量变得很多。

ps:笔者有写过关于封装 MVP 的文章,此处附上:带你封装MVP架构(上)|青训营笔记

1.webp.jpg

MVVM

为解决 MVP 中控制回路复杂的问题,MVVM 诞生了。

MVVM 相对于 MVP 的不同就是 P 层变化为了 VM 层,这个 VM 层可以在 V 层中建立一个模型,将 V 层中的点击事件或者是数据更新等与 VM 层绑定。这个架构是通过提前约定好视图和数据的绑定关系,让控制逻辑自动化和简化了,这个看不见的逻辑是由 Android 内部来做的,所以我们不会像 P 层一样需要定义很多的接口,也不会因为控制回路变得很臃肿。

MVVM 架构很适合于解决如下问题:

  1. 需要页面监听功能
  2. 界面元素多且需要和数据绑定的复杂页面

1.webp.jpg

优缺点总结

MVC -> MVP -> MVVM 这三个架构的演进是不断的解决前者的问题而提出的,其复杂度也是在不断提升的。

我们在日常使用的时候,业务简单的时候使用简单的架构就好,而复杂的业务则要使用复杂的架构来实现,将他们各自应用到适合他们的地方即可。

架构模型 优点 缺点
MVC 1. 模块职责划分明确。主要为 M、V、C 三个层次,利与代码的维护 1. View 和 Controller 容易膨胀
2. View 与 Model 没有完全分离
MVP 1. View 和 Model 完全分离,可以修改视图而不会影响模型,交互逻辑全部放置于 Presenter 层
2. P 层和 V 层的交互是通过接口来进行的,方便了单元测试
1. 页面逻辑复杂的话,对应的接口会变多,维护成本会增大
MVVM 1. VM 层与 V 层解耦更加彻底,VM 层只负责处理和提供数据
2. VM 层只包括数据和业务逻辑、没有 UI ,方便单元测试
1. 数据绑定后使得程序难以调试,因为绑定过程是黑盒话的,数据是自动更新到 UI 的。

AOP

我们经常听到的有 OOP ,所谓 OOP 指的是面向对象编程,将对象作为第一公民,以对象出发来编程,然后再定义该对象的属性。

而 AOP,则为面向切面编程,它会抽离出各种对象的共同属性,以这个共同属性作为一个切面,再将该切面定义到各种的类中 。

这类切面编程的方法就是使用注解或者字节码注入的方式把功能进行植入。例如 @Aspect 注解就是 AOP 编程方式。

IOC

IOC 即为控制反转,在依赖反转原则|设计原则一文中,我有做讲解,此处直接搬运其解释过来:

控制反转 缩写为IOC(Inversion Of Control),简单解释其意思为:把控制权反转过来

具体是把控制权从谁手中反转过来呢?从程序员手中。那反转到谁那里呢,反转到代码框架那里。

这个概念的本意是,程序员在编写代码的时候,编写了设置了整个代码流程,此时控制权在程序员手中。

当对代码抽象框架化,代码拓展性提高,且最终由框架实现代码流程。程序员只输入少量代码启动代码流程,这个就是符合控制反转思想。

框架提供了一个可扩展的代码骨架,用来组装对象、管理整个执行流程。程序员利用框架进行开发的时候,只需要往预留的扩展点上,添加跟自己业务相关的代码,就可以利用框架来驱动整个程序流程的执行。

但是控制反转只是一种设计思想,具体的实现方式各式各样。前文 开闭原则 的demo中,其设计也是符合控制反转原则的,最终是由框架自行驱动程序。

对应的,LiveData 也是一种控制反转思想的变体,与 MVP 的由 P层 驱动 View 层一样,使用数据驱动 UI。

上面的这个说的这个框架,我们多数时候使用的是 接口 。这个接口掌管控制权的同时,也让其更加解耦,更加容易变更。

Android 中使用 IOC 的典型例子:

ActivityManagerPackageManagerWindowManager 这些的服务,是注册到 ServiceManager 中的;而开发者需要使用这些服务的话,是从 ServiceManager 中获取的,并未直接与该服务打交道。

1.webp.jpg

小结

上述讲解了我们 Android 开发者需要学习的一些架构手段,这些架构手段都是在不断的解决我们不同阶段所遇到的问题,其共同目标是为了实现 高内聚低耦合 ,使用合适的手段解决合适的问题,是我们学习的初衷。

相关文章
|
3天前
|
Android开发 Swift iOS开发
深入探索iOS与Android操作系统的架构差异及其对应用开发的影响
在当今数字化时代,移动设备已经成为我们日常生活和工作不可或缺的一部分。其中,iOS和Android作为全球最流行的两大移动操作系统,各自拥有独特的系统架构和设计理念。本文将深入探讨iOS与Android的系统架构差异,并分析这些差异如何影响应用开发者的开发策略和用户体验设计。通过对两者的比较,我们可以更好地理解它们各自的优势和局限性,从而为开发者提供有价值的见解,帮助他们在这两个平台上开发出更高效、更符合用户需求的应用。
|
1月前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
97 2
|
1月前
|
存储 前端开发 Java
Android MVVM架构模式下如何避免内存泄漏
Android采用MVVM架构开发项目,如何避免内存泄漏风险?怎样避免内存泄漏?
88 1
|
5天前
|
Java Linux Android开发
深入探索Android系统架构:从Linux内核到应用层
本文将带领读者深入了解Android操作系统的复杂架构,从其基于Linux的内核到丰富多彩的应用层。我们将探讨Android的各个关键组件,包括硬件抽象层(HAL)、运行时环境、以及核心库等,揭示它们如何协同工作以支持广泛的设备和应用。通过本文,您将对Android系统的工作原理有一个全面的认识,理解其如何平衡开放性与安全性,以及如何在多样化的设备上提供一致的用户体验。
|
4天前
|
安全 Android开发 iOS开发
深入探讨Android与iOS的系统架构差异
本文旨在通过对比分析Android和iOS两大移动操作系统的系统架构,揭示它们在设计理念、安全性、应用生态及开发环境等方面的显著差异。我们将从底层架构出发,逐步剖析至用户界面层面,为开发者和科技爱好者提供一份详尽的技术参考。
15 1
|
13天前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
40 6
|
12天前
|
安全 搜索推荐 Android开发
深入探索Android与iOS的系统架构差异
【10月更文挑战第29天】 在当今的智能手机市场中,Android和iOS无疑是两大主流操作系统。本文旨在深入探讨这两个系统的架构差异,从底层的操作系统设计到用户界面的呈现,以及它们如何影响了开发者和用户的体验。通过对比分析,我们可以更清晰地理解这两种平台的优势与局限,为开发者在选择开发平台时提供有价值的参考,同时也为用户选择设备提供一定的指导。
31 2
|
22天前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
41 2
|
23天前
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
28 1
|
13天前
|
前端开发 Java 测试技术
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
22 0