
抽象把复杂机制收进一个较简单的界面,让人不必每次都理解底层。点击“发送”,通常无需考虑数据怎样被切分、传输和重组。但抽象并不等于底层已经消失:网络丢包时,连接虽然仍表现为可靠传输,等待时间却会突然增加,底层的不稳定便从性能上“漏”了出来。
抽象泄漏不是说抽象毫无价值,也不等同于任何设计缺陷。好的抽象仍能遮住大部分无关细节;所谓泄漏,是某些条件下,使用者必须理解原本被隐藏的限制,才能解释异常或作出正确选择。它与封装相关,但边界不同:封装规定外部如何接触内部,抽象则提供更简洁的理解与操作方式。
中心判断是:抽象减少日常认知负担,却不能取消底层约束。成熟的使用不是始终向下钻,也不是把界面当作绝对保证,而是知道正常时依赖抽象,异常时应检查哪一层。
了解 Geoffrey Chen 的更多信息
订阅后即可通过电子邮件收到最新文章。