从代码设计看 Glide 之写在开头

从代码设计看 Glide 系列其他文章:从代码设计看 Glide 系列

为什么要写这篇文章?

你日常中一定遇到过,想要设计一个模块,但是力不从心,不知道如何下手,更别说随手撸一个图片加载器,网络,埋点通信,这种级别的库了。

那有没有一些什么好的方法可以帮助我们建立这样的能力呢,当然是有的,那就是从开源库中学习,一个好的开源库一定是大众认可才被广泛传播。所以,找到一个有代表性的库,深入浅出剖析这个库的代码设计和编程思想,就是我们这个系列要做的事情。

为什么是 Glide?

当然,你也从标题就看出来了,我们选的这个库就是 Glide。

说实话,Glide 是一个比较老的库了。第一行代码提交于 2012 年,至今已有 10 多个年头了。称之为一个老库不为过。那既然是老库,还有研究的必要吗?尤其是在最近几年 Jetpack,Flutter 蓬勃发展的时候,我们重新去解析一个老库还有必要吗?

当然是有必要的,而且是非常有必要的。

虽然 Glide 出来的时间很久了,但却鲜有人去深入解析 Glide 的代码设计和编程思想。大多数只是从某个切入点来学习 Glide 的实现细节,研究某个场景下的解决方案。

其次,Glide 除了为我们提供高效,稳定的图片加载功能外,还为我们提供了一个如何打造易用,可拓展且优雅的开源库的典型范例。它其中蕴含的设计模式和编程思想完全可以运用到我们日常的代码编写中,提升我们的代码质量。

所以,这个系列的文章会立足于此,深入解析 Glide 中的设计模式和编程思想。
另外这个系列也会包含我个人对如何进行模块设计的一些思考。

需要做哪些阅读准备?

本系列基于 Glide v4.14.0 版本。

你可以从 github 获取对应的源代码,然后切换到指定的 tag 即可。当然大多数情况下使用 master 也不会影响阅读,因为整个 v4 的版本基本已经趋于稳定,已不在做一些结构上大的变更。

源码地址:https://github.com/bumptech/glide

阅读顺序是什么?

这个系列会从 Glide 的主体框架出发,随着调用链一点点深入,并且辅以类图和模块图,来帮大家从宏观的角度理解 Glide 的代码设计。我也不会贴大量的实现细节和代码调用链,而是会从概念上解释这么设计的必要性,从而避免陷入到过多细节中。

同时,我也会尽可能的保持每个篇章内容不会过多,方便大家在上班路上或者工作间隙阅读。

思考一下?

那么在即将进入我们的第一个章节之前,我们先思考这么一个问题:
一个图片加载器的核心功能应该由哪几个类或者模块组成呢?

TIPS:
这个系列是一边读源码一边写出来的,所以可能有理解不够深入的地方,欢迎大家随时指正。

作者

0xforee

发布于

2023-07-02

更新于

2023-08-21

许可协议


欢迎关注我的公众号 0xforee,第一时间获取更多有价值的思考

评论