极客视点
极客时间编辑部
极客时间编辑部
113241 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/04:37
登录|注册

如何从开源项目中汲取架构思维?

讲述:初明明大小:4.23M时长:04:37
如果说技术架构如同中医一样,药材是基础,药方是核心,那么药方就好比技术方案,是技术架构的灵魂。近日,小桔车服营销基础负责人高福来根据自己在系统架构方面的经历,分享了如何从优秀的框架源码中学习架构设计方案。
高福来认为阅读源码有三个层次境界,从低到高依次为:
了解层次:知道整体的流程是怎样的,会使用,这个阶段停留在表面。
深入层次:深入源码内部,对细节实现、原理非常熟悉。
内化层次:从这些框架中汲取设计思维,并能总结出通用方案,又能根据这个通用方案演化成不同的具体方案。这听起来比较虚,下面会用具体的例子来解释。
如果是工作了两三年的人,对 SPI 或许并不陌生,在 META-INF/services 目录下,有一个 java.sql.Driver 文件,然后在 DriverManager 中加载并初始化数据库驱动。
SPI 最常用的场景就是标准定义与实现解耦,运行时加载实现。为什么要在 META-INF/services 目录下建立文件呢,跟踪源码,在 ServiceLoader 类中可以看到有这个前缀定义,到这你可以看出这是一个约定俗成的事情。
至此,可以看到 SPI 的实现原理是什么,说白了,就是运行时在指定的目录下加载对应的文件,读取文件中的内容,然后实例化对应的类。
尽管已经知道了 SPI 的原理、用法、甚至在某些场景下还可以用 SPI 来解决问题,但如果止步于此,似乎隐约有些难以释怀。下面继续问两个问题:
为什么它要定义在 META-INF/services 目录下建立文件,能不能换个目录呢?
目录里的内容为什么只写实现类,能不能换成其它的格式来写呢?
有些人可能会说源码就是这样写的,哪有为什么,其实深入思考一下,这些就是约定的规范,换言之就是标准,这是一个重要的结论。再仔细看整个 SPI 的执行流程:从约定的路径下加载文件并实现化类、放到容器中、需要的时候从容器中取出并执行对应的操作。
从上面的流程中总结它的关键步骤是:标准、识别、注册、运行。标准就是一种约定,你可以定义成文件,也可以完全定义到其它方式。
系统的可扩展性可以遵循“标准、识别、注册、运行”这个法则去演化不同的具体实现,可以根据实际的场景选择合适的方法。阅读源码的时候,除了要看它实现的原理,更重要的是找出通用的规律,演化成不同的解决方案。
现在开源框架太多了,一个人很难有精力看完所有的框架源码,而快速掌握源码是一项关键能力。掌握它,学习新的框架就会事半功倍。听起来很美好,但要做到可并不简单。
那框架到底是什么呢?不同的人对它的定义也不一样,高福来对框架的定义是:有固定的流程,并且对用户开放业务逻辑的半成品,这里有 3 个关键点:
固定的流程:这是框架解决具体问题的关键步骤,强调的是有什么而不是如何做。
开放用户业务:框架的核心是赋能于用户,解决某类问题,能执行用户的业务逻辑。举个例子,Hadoop 在执行 Map-Reduce Job 时,针对不同的用户其业务逻辑是不一样的,Hadoop 能赋能用户,执行用户自己的业务逻辑。
半成品:在没有具体的业务场景下,框架本身运行是没有意义的,所以它是一个半成品。
从这些框架中,可以学到一种架构思维:固定不变的流程,开放变化点。阿里 TMF 框架中的关键思想也有类似的表述。
现在回过头再看上面对框架的定义,即有固定的流程,并且对用户开放业务逻辑的半成品。由此我们可以知道阅读源码的关键是什么。就是找固定的流程,知道了固定流程,再带着疑问去看源码实现,就快得多。
架构思维听起来是一个非常空洞的概念,尤其是对于没有架构经验的人来讲。对于一个刚开始接触架构的人来讲,如何学习呢?高福来认为应该从点滴开始,积累解决方案,抓住问题本质,形成通用架构设计方案。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 盖瑞Chen
    为啥要拿中医开头🤦🏻‍♂️
    1
  • 二康
    优秀开源项目里有好多优秀的设计思想需要学习
  • AhianZhang
    最近因为要做基础框架,看的开源项目比较多,其中每个优秀的项目中都用了大量的设计模式
  • 小高
    往深层次说,是不是就是看框架的实现思维?
  • zhou
    那到底如何从开源项目汲取架构思维呢?
收起评论
显示
设置
留言
5
收藏
99+
沉浸
阅读
分享
手机端
快捷键
回顶部