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开发
Android应用开发中的MVP架构模式解析
【5月更文挑战第25天】本文深入探讨了在Android应用开发中广泛采用的一种设计模式——Model-View-Presenter (MVP)。文章首先概述了MVP架构的基本概念和组件,接着分析了它与传统MVC模式的区别,并详细阐述了如何在实际开发中实现MVP架构。最后,通过一个具体案例,展示了MVP架构如何提高代码的可维护性和可测试性,以及它给开发者带来的其他潜在好处。
|
6天前
|
Android开发 开发者
Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86)
Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86)
17 1
|
17天前
|
XML 存储 Android开发
Android实战经验之Kotlin中快速实现MVI架构
本文介绍MVI(Model-View-Intent)架构模式,强调单向数据流与不可变状态管理,提升Android应用的可维护性和可测试性。MVI分为Model(存储数据)、View(展示UI)、Intent(用户动作)、State(UI状态)与ViewModel(处理逻辑)。通过Kotlin示例展示了MVI的实现过程,包括定义Model、State、Intent及创建ViewModel,并在View中观察状态更新UI。
56 12
|
2月前
|
前端开发 JavaScript 测试技术
安卓应用开发中的架构模式解析
【6月更文挑战第21天】在软件开发领域,架构模式是设计优雅、高效、可维护应用程序的基石。本文深入探讨了安卓应用开发中常见的架构模式,包括MVC、MVP、MVVM和Clean Architecture,旨在为开发者提供一个清晰的指导,帮助他们选择最适合自己项目的架构风格。通过对比分析这些架构模式的特点、优势以及适用场景,文章揭示了如何根据项目需求和团队能力来采用恰当的架构模式,以实现代码的可维护性、可扩展性和可测试性。
38 7
|
2月前
|
Java API Android开发
技术经验分享:Android源码笔记——Camera系统架构
技术经验分享:Android源码笔记——Camera系统架构
31 0
|
2月前
|
前端开发 测试技术 API
探索安卓应用的架构演进:从MVC到MVVM
本篇文章将深入探讨安卓应用开发中的架构演进,特别关注从传统的MVC(Model-View-Controller)到现代流行的MVVM(Model-View-ViewModel)架构的转变。通过对比两种架构的设计理念、实现方式和实际应用案例,解析MVVM在提高代码可维护性和可测试性方面的优势。
34 0
|
3月前
|
前端开发 Android开发
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
|
3月前
|
持续交付 Android开发 开发者
构建高性能微服务架构:后端开发的终极指南构建高效Android应用:Kotlin与Jetpack的完美结合
【5月更文挑战第28天】 在现代软件开发的浪潮中,微服务架构已经成为了设计灵活、可扩展且易于维护系统的重要模式。本文将深入探讨如何构建一个高性能的微服务架构,涵盖从基础概念理解到实践策略部署的全过程。我们将讨论关键的设计原则、技术选型、性能优化技巧以及安全性考虑,旨在为后端开发者提供一个全面的指南,帮助他们构建出能够适应快速变化的市场需求和技术挑战的系统。 【5月更文挑战第28天】 在移动开发的世界中,效率和性能是衡量一个应用成功与否的关键因素。本文将深入探讨如何通过结合Kotlin语言和Android Jetpack组件,来构建一个既高效又易维护的Android应用。我们将透过实际案例分析
|
3月前
|
XML 前端开发 Android开发
Android架构设计——MVC,滴滴 战略 面试
Android架构设计——MVC,滴滴 战略 面试
|
3月前
|
XML 前端开发 Android开发
Android架构设计——MVC(1),Android多进程从头讲到尾
Android架构设计——MVC(1),Android多进程从头讲到尾