Android项目架构(android项目架构设计)

架构究竟是什么?如何更好的理解架构?

我们知道一个APP通常是由class组成,而这些class之间如何组合,相互之间又如何产生作用,就是影响这个APP的关键点。

细分的话我们可以将其分为类、接口、任务流。

  • 类就是组成架构的核心;
  • 接口则是这些类之间通讯的路径、通讯的机制、通讯的期望结果;
  • 任务流则是描述系统如何使用类和接口完成某一项需求比如:一次网络请求。

我们在进行架构设计的时候,通常具有一定的目的性,用一句话来概括就是:架构设计的真正目的是为了解决软件系统的复杂度带来的问题,所谓高性能、高可用、高扩展。

我们将其大致可以分为:易扩展、易维护、可定制、可伸缩

  1. 易扩展:APP 必须能够在用户的 UV/PV 数量快速增加的情况下,保持软件合理的性能。只有这样在快速从 0 到 1 的需求迭代中才能后顾无忧。
  2. 易维护:软件系统的维护包括两方面,一是修复现有的 bug,二是将新的迭代需求开发到现有系统中去。一个易于维护的系统可以有效地降低人力和物力。
  3. 可定制:在同一个软件系统中可能面向的用户群体是不同的、多样的,需要满足根据用户群的不同和市场需求的不同进行定制化。比如一个 APP 中某些功能只针对特定用户开放。
  4. 可伸缩:在新技术出现的时候,一个软件系统应当允许接入新技术,从而对现有系统进行功能和性能的扩展。

现在我们在进行设计的时候,一般都会有要求高内聚、低耦合,以此来保证APP的高质量

为了方便大家理解,这边举个栗子:

低内聚,高耦合:

Android项目架构(android项目架构设计)

高内聚,低耦合:

Android项目架构(android项目架构设计)

大家觉得谁更好维护?更容易调整?出错了更容易排查?

我们在架构设计中最本质的目的就是管理复杂度,你听过的各种思想、原则、方法大多都是为了控制复杂度而设计出来的。

像依赖注入就是项目组件解耦中非常重要的一个手段,Dagger2 和 Hilt 都是在 Android 中最主要的依赖注入框架。

依赖注入其实并不是一个很神秘的概念,往往在不经意间我们就使用了依赖注入。依赖注入应用了IOC控制反转的原理,简单来说就是在类的外部构造依赖项,使用构造器或者 setter 注入。

使用依赖注入可以为我们带来什么好处呢?

  • 重用组件: 因为我们在类外部构造依赖项;
  • 组件解耦: 当我们需要修改某个组件的实现时,不需要在项目中进行大量变更;
  • 易测试: 我们可以向依赖方注入依赖项的模拟实现,这使得依赖方的测试更加容易;
  • 生命周期透明: 依赖方不感知依赖项创建 / 销毁的生命周期,这些可以交给依赖注入框架管理。

我们都知道Dagger是一个早期的依赖注入库,但确实不好用,需要配置很多东西。虽然它能很好帮我们解耦各个模块之间的强关联性,提高项目的健壮性。但其却以羞涩难懂、难用而闻名,吓退了很多的开发者。

Hilt是 Dagger2 的二次封装,Hilt 本质上是对 Dagger 进行场景化。是一个功能强大且用法简单的依赖注入框架,同时也可以说是近期 Jetpack 家族中最重要的一名新成员。但Hilt涉及的知识点也是相当繁多,即使它将 Dagger2 的用法进行了大幅的简化,如果你之前对于依赖注入完全没有了解,直接上手 Hilt 还是会有不少的困难。

在这里问大家几个问题,看看能不能回答上来:

  • 你知道面试官为什么要问你IOC吗?
  • 你知道被问的原理包含哪些吗?
  • 你知道这些原理是如何指导我们代码实践开发的吗?
  • 你知道如何从架构层面设计我们的IOC框架解决项目问题?
  • 你知道代码重构中的痛点问题是如何处理的吗?

 

说了这么多,那么我们如何学习Hilt,将IOC技术融入进我们的架构设计中呢?

为了帮助大家站在高级工程师的角度,深度理解IOC技术在移动端的实战应用,同时掌握移动端流行IOC框架Hilt与Dagger2的实战应用与实现原理。

在这里分享一份由大佬亲自收录整理的学习PDF+架构视频+面试文档+源码笔记高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料

这些都是我现在闲暇时还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在未来取得一份不错的答卷。

当然,你也可以拿去查漏补缺,提升自身的竞争力。

真心希望可以帮助到大家,Android路漫漫,共勉!

如果你有需要的话,只需私信我【进阶】即可获取

Android项目架构(android项目架构设计)

Android项目架构(android项目架构设计)

Android项目架构(android项目架构设计)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论