📄 一句话概括
【框架】这词被用滥了,真正的分界只有一条:谁调谁——类库你调它,框架它调你。
📝 本节和前面几节的关系
6.4 讲完类库的共同祖先,这一节转向另一种复用单位:框架。
一、一个词,很多意思
应用框架、测试框架、Web 框架、UI 框架……叫法一样,东西差别很大。 共同点只有一条:它替你定了骨架,你在骨架里干活。 所以判断一个东西是不是框架,不看它叫什么,看它有没有【替你决定流程】。
二、分界线:谁调谁
类库:你调它。你写 lib_add(1, 2),调完就回来。
框架:它调你。你写好一个 hook 交上去,由它在合适的时机调你。
实测调用顺序:你→类库函数;你→框架入口;框架→你填的 hook;你的 hook 执行完。
这个反过来的顺序,就叫控制反转。
三、为什么框架难学
学类库只要查一个函数签名。 学框架要搞清它在什么时候、按什么顺序调你——这个知识往往不写在函数签名里。 所以框架的文档重心在流程图,类库的文档重心在 API 列表。
四、选框架看什么
看它的骨架和你的流程合不合——不合就要跟它对着干,那比不用更累。 看它的控制反转点够不够多——点太少,你就只能在它的流程里硬塞。 看它多久没改接口——框架比类库更绑人,接口一动你就得跟着搬。
五、动手 Demo:框架存在各种含义
同样做一个加法,用类库和用框架各写一遍。 把实际调用顺序打出来,看谁调谁。
# 类库:你调它
def lib_add(a, b):
return a + b
# 框架:它调你
def framework_run(hook):
return hook()
def my_hook():
return "结果"
print(lib_add(1, 2), framework_run(my_hook))
实跑输出:
--------------------------------------------------------------------
框架存在各种含义
--------------------------------------------------------------------
【框架】这词被用滥了。**真正的分界只有一条:谁调谁。**实测两种:
类库:你调它 你 → lib_add(1, 2) → 3
框架:它调你 你 → framework_run(hook) → 结果
实际调用顺序:
1. 你 → 类库函数
2. 你 → 框架入口
3. 框架 → 你填的 hook
4. 你的 hook 执行完
它是什么 谁调谁 你要写什么
-------------------------------------
类库 你调它 调用语句
框架 它调你 填空的那几段
**【控制反转】听着玄,实测就是调用顺序反过来。**
**所以框架比类库难学**:你得先搞清它在什么时候调你,而不是只查一个函数签名。
实测调用顺序:你→类库函数;你→框架入口;框架→你填的 hook——最后一步方向反了。 这个反转就叫控制反转,也是框架比类库难学的原因:你得知道它什么时候调你。
30 秒实验
- 挑一个你用的库,判断它是类库还是框架(看谁调谁)。
- 画出你项目里框架的调用顺序:哪一步是它回头调你的。
常见误区
- 以为带【框架】两个字就是框架。看它有没有替你决定流程。
- 以为框架一定比类库高级。不合骨架的框架比不用更累。
自测三问(点开对答案)
1. 类库和框架的分界线是什么? —— 谁调谁:类库是你调它,用完就回来;框架是它调你,由它在合适时机调用你填的 hook。 2. 什么叫控制反转? —— 把【什么时候执行你的代码】的决定权交给框架——实测调用顺序里最后一步方向反了。 3. 为什么框架比类库难学? —— 学类库只要查签名,学框架要搞清它在什么时候按什么顺序调你,而这往往不写在签名里。- ☐ 下一节(6.6 框架是应用程序的半成品)
相关笔记
- 框架是应用程序的半成品 — 半成品到什么程度
- 独立性较高的构件:组件 — 更小的复用单位
- 🌐 计算机网络 · 索引 — 分层与回调
- 🧩 面向对象是怎样工作的 · 索引