目标
这是更广泛的 CLean Architecture 文章系列的一部分。我们要实现的目标
- 我们将为我们的应用程序研究几种模块化解决方案。
- 为我们的 Github 配置文件项目设置模块
本节之后的项目结构如下。
在本文时,您将大致了解如何考虑模块化应用程序和设置模块化 android 项目。
项目概况
我们将构建一个 Android 应用程序,以按照简洁的架构指南获取 GitHub 配置文件。该应用程序将从GitHub API获取数据,将其保存在本地数据库中,并将其显示在 UI 上。
本节将进行规划,这是任何项目的第一步,也是最关键的一步。在某些情况下,已经为您完成了规划,您必须立即着手,设置环境并开始构建软件。但是,在某些情况下,您将需要进行规划。例如,当您成为高级开发人员时,您将花费大量时间规划应用程序、选择工具并确保软件实施按计划进行。
模块化
我们将应用程序分成几个模块。模块化对您的组织有几个好处。一些优点是:
-
委派 ——如果您正在构建一个超出少数开发人员的应用程序,您需要将不同的部分委派给不同的开发人员或团队。将应用程序划分为模块集中了每个模块的范围,使其易于委派。少数开发人员可以拥有应用程序的一部分,并且开发和测试不互相踩脚。团队可以在不影响其他开发人员工作的情况下试验他们的模块。
-
代码可重用性——我们希望尽可能多地重用代码片段,并尽可能避免重复,使用 DRY 原则。当您模块化您的应用程序时,您可以使代码易于重用。
-
构建速度——模块化的关键优势之一是提高构建速度。在大型应用程序中,构建速度可能是一个挑战。现代应用程序通常是具有不同子应用程序的大型超级应用程序。构建如此广泛的应用程序将花费大量时间。调试也将是一个大问题。当你模块化你的应用程序时,你有几个选项可以提高你的构建速度。例如,您可以并行运行应用程序,或者运行单个模块,在其中应用更改,从而大大减少构建时间并提高生产力。
模块化过程
模块化应用程序类似于为您的房子选择架构。很有主见。关于如何模块化应用程序存在争议。它高度依赖于您的应用程序、团队、特定需求和您的偏见。没有经验法则。
但是,与任何其他工程实践一样,存在优秀、中等和明显较差的模块化决策。一些模块化实践更容易实现和维护,而另一些则让你陷入困境。选择不会伤害您的开发人员的方法。
三种常见的模式是
- 按层模块化 - 将您的代码划分为各自的架构层:域、数据和表示。应用程序中的三层具有不同的功能。数据层集中在与数据相关的逻辑上,即从远程数据源获取数据,使用房间和数据存储库处理本地缓存,以及存储库实现。领域层只负责管理您的业务逻辑,其中您拥有业务逻辑模型、存储库接口和用例。您的演示文稿将包含您的屏幕及其演示文稿。这在小型团队中很有用。如果您以前从未模块化过您的应用程序,那么这是开始模块化的好地方,因为您可以可视化每个模块的功能。然而,
- 按功能模块化 - 将代码划分为它的功能,主要是它所代表的屏幕。在这里,每个模块都包含特定区域和碎石的逻辑。例如,您的登录逻辑将是一个仅处理与逻辑相关的逻辑的模块。此选项使您可以轻松地尝试不同的选项。如果你想在一个小市场尝试一个新功能,你可以让一些工程师实现并发布该功能,而不会打扰主应用程序。您可以交付具有功能模块化的动态应用程序。如果您的应用程序中有 30 个功能,那么一个团队可以独立处理每个功能,而不会互相拖后腿。这种模块化的挑战是随着应用程序变得越来越大,代码重复的可能性很高。一个团队将编写另一个团队编写和测试的代码的 30%。
- 混合模块化 - 这是层和功能模块化的组合,还有一个额外的模块注入器类,其中包含基本抽象并将所有模块粘合在一起。混合模块化没有规则。然而,如果一个模块是可重复使用的,比如检查网络连接,或者独立的,作为一个可穿戴的应用程序,那么它是单个模块的一个很好的候选者。这是混合模块化中的模块如何交互的示例。
模块化对于一个团队来说可能是灵丹妙药,而对于另一个团队来说则是兔子洞。始终考虑您的情况。
我们有什么
这是一个最小的应用程序。我们将其分为三个模块。
- 数据模块 - 该模块将保存与数据相关的逻辑。它是一个包含本地和远程数据的Android 库。在健壮的应用程序中,我们会做一些分离。例如,我们将拥有仅负责远程数据的远程数据和处理缓存的本地数据。在这种情况下,远程数据模块将是 Kotlin 和 Java 库,而本地数据将是 Android 库。
- 域模块 - 保存业务逻辑信息的纯 Kotlin 和 Java 库。它有我们的业务逻辑模型、单一事实来源和用例。
- 演示模块 - 所有与 UI 相关的逻辑。我们将为应用程序中的所有屏幕提供 UI、UI-State 和 ViewModels 逻辑。使用大型应用程序时,我们会将层分离到不同的模块中,以保存精确且独立的 UI 逻辑。但是,由于我们的应用程序很小,我们将原谅自己并将其设为单个模块。
设置
现在,让我们为我们的项目设置主干。
创建一个新 项目 在 Android Studio 中启动一个新项目(您也可以使用您的一个辅助项目)当 Android Studio 构建您的项目时,将应用程序模块重构为演示文稿,因为这将在此项目中执行。您也可以将模块保留为应用程序。
App => Refactor =>Rename => Rename Module
重命名为演示文稿
将名称从app更改为展示项目结构。
添加数据和域模块 域模块将是一个纯 Kotlin 库,没有任何对 Android 库的引用。数据模块将是一个 Android 库,因为我们有房间和数据存储库的缓存逻辑,它们是 android 框架。
要添加数据模块,
Project View => New ⇒ Module ⇒ Android Library
命名模块数据
接下来,我们添加域模块。
Project View => New ⇒ Module ⇒ Java or Kotlin Library
命名模块域
等待项目同步。此时,我们有一个多模块应用程序。
注意:presentation 文件夹中的点表示该模块可以与 android 应用程序捆绑在一起,因为我们有 android 应用程序插件
plugins {
id 'com.android.application'
id 'kotlin-android'
}
Android 库有三个栏,Kotlin 库有一个蓝色的小方块。
这就是我们的依赖项的样子
settings.gradle 文件
域级依赖
表示层依赖
数据级依赖
项目级依赖
这样来看。我们不再有一个单体应用程序,而是一个模块化的应用程序。
接下来,我们将配置 Kotlin DSL。尽管对于大型项目是可取的,但使用 Groovy 管理依赖关系非常好。
学习福利
【Android 详细知识点思维脑图(技能树)】
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
Android架构视频+BAT面试专题PDF+学习笔记如有需要可以点击文末的微信卡片即可免费领取
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。