- 介绍
- 90-9-1 法则 (90–9–1 Principle or 1% Rule)
- 阿姆达尔定律 (Amdahl's Law)
- 破窗效应 (The Broken Windows Theory)
- 布鲁克斯法则 (Brooks's Law)
- CAP 定理 (CAP Theorem or Brewer's Theorem)
- 康威定律 (Conway's Law)
- 坎宁汉姆定律 (Cunningham's Law)
- 邓巴数字 (Dunbar's Number)
- 邓宁-克鲁格效应 (The Dunning-Kruger Effect)
- 费茨法则 (Fitts's Law)
- 盖尔定律 (Gall's Law)
- 古德哈特定律 (Goodhart's Law)
- 汉隆的剃刀 (Hanlon's Razor)
- 席克定律 (Hick's Law or Hick-Hyman Law)
- 侯世达定律 (Hofstadter's Law)
- 哈特伯定律 (Hutber's Law)
- 技术成熟度曲线 (The Hype Cycle or Amara's Law)
- 隐式接口定律 (Hyrum's Law or The Law of Implicit Interfaces)
- 柯林汉定律 (Kernighan's Law)
- 林纳斯定律 (Linus's Law)
- 梅特卡夫定律 (Metcalfe's Law)
- 摩尔定律 (Moore's Law)
- 墨菲定律 (Murphy's Law / Sod's Law)
- 奥卡姆剃刀 (Occam's Razor)
- 帕金森定理 (Parkinson's Law)
- 过早优化效应 (Premature Optimization Effect)
- 普特定律 (Putt's Law)
- 里德定律 (Reed's Law)
- 复杂性守恒定律 (The Law of Conservation of Complexity or Tesler's Law)
- 得墨忒耳定律 (The Law of Demeter)
- 抽象泄漏定律 (The Law of Leaky Abstractions)
- 帕金森琐碎定理 (The Law of Triviality)
- Unix 哲学 (The Unix Philosophy)
- Spotify 模型 (The Spotify Model)
- 沃德勒定律 (Wadler's Law)
- 惠顿定律 (Wheaton's Law)
- 原则
- 乔治·伯克斯定律 (All Models Are Wrong or George Box's Law)
- 切斯特森围栏 (Chesterson's Fence)
- 死海效应 (The Dead Sea Effect)
- 呆伯特法则 (The Dilbert Principle)
- 帕累托法则 (The Pareto Principle or The 80/20 Rule)
- 舍基原理 (The Shirky Principle)
- 彼得原理 (The Peter Principle)
- 鲁棒性原则 (The Robustness Principle or Postel's Law)
- SOLID
- 单一功能原则 (The Single Responsibility Principle)
- 开闭原则 (The Open/Closed Principle)
- 里氏替换原则 (The Liskov Substitution Principle)
- 接口隔离原则 (The Interface Segregation Principle)
- 依赖反转原则 (The Dependency Inversion Principle)
- 不要重复你自己原则 (The DRY Principle)
- KISS 原则 (The KISS Principle)
- 你不需要它原则 (YAGNI)
- 分布式计算的谬论 (The Fallacies of Distributed Computing)
- 阅读清单
- 在线资源
- 相关项目
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
抽象泄漏定律 (The Law of Leaky Abstractions)
在某种程度上,所有非平凡的抽象都是有泄漏的。
乔尔斯·波尔斯基 (Joel Spolsky)
该定律指出,通常用于简化复杂系统的抽象,在某些情况下将底层系统泄漏出来,使得抽象表现出意外的行为。
例如加载文件并读取其内容。文件系统 API 是较低级别内核系统的抽象,它们本身是与磁盘(或 SSD 的闪存)上的数据更改相关的物理过程的抽象。在大多数情况下,处理文件(如二进制数据流)的抽象将起作用。但是,对于磁盘驱动器,顺序读取数据将比随机访 问快得多(由于页面错误的开销增加)。但对于 SSD 驱动器,此开销不会出现。需要理解基础细节来处理这种情况(例如,数据库索引文件的良好结构可以减少随机访问的开销),开发人员需要合理的抽象,来处理不 同的细节。
当引入更多的抽象时,上面的例子会变得更复杂。Linux 操作系统允许通过网络访问文件,但在本地表示为普通文件。如果存在网络故障,这种抽象将会泄漏。如果开发人员将这些文件视为普通文件,而不考虑它们可能会受到网络延迟和故障的影响,那么解决方案就会出错。
描述该定律的文章表明,过度依赖抽象,加上对底层过程的理解不足,实际上使得问题在某些情况下更加复杂。
参见:
- 隐式接口定律
真实的例子:
- Photoshop 启动缓慢: 我过去遇到过一个问题,就是 Photoshop 启动缓慢,有时需要几分钟。问题好像是 Photoshop 启动时,会读取当前默认打印机的一些信息。但是,如果该打印机实际上是一台网络打印机,则可能需要很长的时间。将网络打印机与本地打印机当作同样的抽象, 导致连接不良的情况下出现问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论