程序员应知必会的思维模型之 16 隐式接口定律 (Hyrum‘s Law or The Law of Implicit Interfaces)

隐式接口定律 (Hyrum’s Law or The Law of Implicit Interfaces)

当 API 有足够多的用户时,你在合约中的承诺已不重要:你系统的所有可观察行为都将被某些人所依赖。–海伦·赖特 (Hyrum Wright)

隐式接口定律表明,当你的 API 有足够多的用户时,API 的所有行为(包括那些未囊括在公共说明中的一部分)最终都会被其他人所依赖。 一个简单的例子是 API 的响应时间这种非功能性因素,还有一个更微妙的例子是:用户使用正则表达式判断错误信息的类型时,即使 API 的公共说明没有说明消息的内容,来指示用户错误的类型,一些用户也可能会使用并更改该消息,而这实际上会破坏 API 的使用。


历史

在过去几年中,在地球上最复杂的软件系统之一中进行低级基础结构迁移时,我们对接口及其实现之间的差异进行了一些观察。我们通常将接口视为与系统(如汽车中的方向盘和踏板)进行交互的抽象,而将实现方式视为系统完成其工作的方式(车轮和引擎)。出于多种原因,这很有用,其中最重要的原因是,最有用的系统迅速变得过于复杂,以至于单个人或团体无法完全理解,而抽象对于管理这种复杂性至关重要。

定义正确的抽象级别是一个完全独立的讨论(请参见“神话人月”),但是我们希望认为一旦定义了抽象,它就是具体的。换句话说,从理论上说,接口应该在系统的使用者与其实现者之间提供清晰的分隔。在实践中,随着系统使用量的增加,这种理论被打破,其用户开始依赖通过接口有意公开的实现细节,或者他们通过常规使用而变得神圣。Spolsky的“泄漏抽象法”体现了消费者对内部实现细节的依赖。

从逻辑上讲,这导致以下观察,俗称“隐式接口法则”:如果有足够的使用,就没有私有实现之类的东西。也就是说,如果一个接口有足够的使用者,那么它们将有意或无意地共同依赖于实现的各个方面。此效果用于约束对实现的更改,该更改现在必须既符合显式记录的接口,也必须符合用法捕获的隐式接口。我们通常将这种现象称为“ bug兼容bug”。

隐式接口的创建通常是逐渐进行的,并且接口使用方通常不会意识到这种情况的发生。例如,接口可能无法保证性能,但是消费者通常会期望其实现能够带来一定程度的性能。这些期望成为系统隐式接口的一部分,并且对系统的更改必须保持这些性能特征,才能继续为其使用者发挥作用。

并非所有使用者都依赖于相同的隐式接口,但是如果给定了足够的使用者,则隐式接口最终将与实现完全匹配。此时,接口已消失:实现已成为接口,对其所做的任何更改都将违反消费者的期望。幸运的是,广泛,全面和自动化的测试可以检测到这些新期望,但并不能改善它们。

隐式接口是大型系统的有机增长所致,尽管我们希望这个问题不存在,但设计人员和工程师在构建和维护复杂系统时应明智地考虑它。因此,请注意隐式接口是如何限制系统设计和发展的,并知道对于任何合理流行的系统,该接口的作用远比您想象的要深。


谁是Hyrum?

Hyrum是Google的一名软件工程师,致力于大型代码更改工具和基础架构。在此之前,Hyrum花了五年时间改进Google的核心C ++库。当即使是最简单的库更改也导致某些遥远的系统发生故障时,上述观察都是出于Hyrum经验。

尽管Hyrum可能已经观察到了,但值得称赞的是泰特斯·温特斯(Titus Winters),他实际上将其命名为“希律(Hyrum)定律”,并更广泛地推广了该概念。


观点

  • Hyrum定律-我们的痛苦现在有了名字!

  • 有时会感觉到所有变化都在打破变化

  • Hyrum定律 是它的一种表述。有一个原因,即使-release返回void,通过-[NSObject release]的某些路径也会使返回寄存器归零。

  • 主要是在我的博客上工作。使用带有Markdown的真正简单的GatsbyJS设置进行输入,并将其部署到github页面。没什么复杂的。从Google的《软件工程》一书中了解了Hyrum定律。


加入我们共同进步

群名称:程序员思维模型
群 号:144079203
​​​教程网站:www.swiftuigit.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识大胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值