为什么要叫钩子?

2021-06-04 16:18:19 +08:00
 balabalaguguji

很多软件的事件回调都叫钩子,也就是 hook,例如 SVN 和 Git

不理解为什么叫钩子,感觉不是很好理解,难道这有什么故事

7315 次点击
所在节点    程序员
51 条回复
xiaofan305
2021-06-05 09:17:23 +08:00
歪一个楼,我觉得 handle 可以翻译成“抓手”,形象贴切
TinyWang
2021-06-05 10:06:28 +08:00
我还以为楼主问的是屁股
Cloutain
2021-06-05 10:44:52 +08:00
安全选手的眼中,callback 是系统或框架或某某程序提供的官方接口,hook 是自己硬塞进去的
chenyu8674
2021-06-05 11:25:02 +08:00
玩过黄金矿工没
ming159
2021-06-05 11:25:38 +08:00
主要是为了 扩展性 . 比如你设计一个框架可以这样来做

// 可以是接口,也可以是函数,或者是其他
[函数|接口] hook=null;

// 注册钩子函数
function addHook([函数|接口] hook){
this.hook=hook;
}

// 此函数就可以由于钩子函数的存在,在不修改代码的基础上通过传入不同的钩子实现不同的逻辑
function something(Object args){
// 比如首先参数验证,然后做一些处理
if(this.hook!=null){
args = this.hook(args); // 调用钩子函数
}
// 后续的操作
// 如果没有注册钩子函数,则系统就是默认行为.
// 如果之前添加了自定义的钩子函数,可以对系统默认行为作出自定义
}
winglight2016
2021-06-05 11:50:46 +08:00
个人理解:回调是嵌入到主线程的代码(耦合),而回调是第三方主线程来控制被 hook 的进程在状态触发时去调用 hook 的,所以差别非常大,在架构上不是一回事儿。
winglight2016
2021-06-05 11:52:40 +08:00
@winglight2016 修正一下:“而回调”应该是“而 hook”
wupher
2021-06-05 12:01:09 +08:00
最早写 VC 的时候,远在上个世纪,MSDN 的文档就称相关机制及 API 为 API Hook,Dll Hook 。

我觉得是相承下来的吧。
johnsona
2021-06-05 14:16:39 +08:00
钩子中间件 aop 就是调另外一个东西之前把你钩住 执行完我的方法再走
shayuvpn0001
2021-06-05 17:20:24 +08:00
@BeautifulSoap 楼层里就你解释的是最到位的,现在本地应用程序的确了解透彻的人不多了。很多话术不过是把以前的东西包装了一下,换了个应用场景,很多没见过的都以为是什么新发明的东西。
Leigg
2021-06-05 20:03:36 +08:00
中间价,切面,钩子有很大相似度

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/781410

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX