乐趣区

关于软件工程:软件工程抽象泄漏与编程

什么是形象透露

这个概念来自于 Joel Spolsky 的博客(The Law of Leaky Abstractions – Joel on Software)。文章大略讲述了,从 TCP 协定的封装让 IP 协定变得稳固牢靠,推导出“形象封装能够失去优良的设计”,再到如果数据传输不再稳固,那就使用者就不得不深刻底层(甚至到物理层,查看是不是宠物蛇咬断了网线)去排除问题,总结出“形象封装总是会透露的,咱们不得不破费更多的精力,并学习更多的常识,能力排除这个问题”。

举个更简略的例子,咱们要出一趟远门,最底层的办法,就是用脚走。这时候,咱们拿出一个优良的形象——一辆宝马汽车,它把轮子、座位、引擎等等概念封装起来,给了咱们简略的应用办法(开车、转弯、停车等),让这趟旅途快捷舒服。然而,它总有一天会呈现形象透露——一个整机的损坏导致抛锚了,这时候咱们就不得不找到相熟整个汽车零碎的工程师去解决这个问题。因为咱们没有对于这个高级形象的常识,只管解决形式是简略的“替换一个 xx 整机”。

古代世界基于形象运行,形象让咱们的生存极为便捷。 比方“去公司”就是,地铁公司把这趟路程和布局封装起来了,你只须要刷 2 次卡就行了,不须要晓得它的运作原理。然而一旦形象呈现问题,某天某种原因地铁停运了,解决问题就须要大量且零碎的常识,去查看所有的细节。

对编程的影响

当初对前端最大的误会是,懂一个 MVC 框架,例如 Vue,就能够进行开发工作了。Vue 把 HTML、JS 和 CSS 封装成了固定构造的文件,繁冗的 DOM 绑定和操作形象成了简略的数据赋值。那是不是意味着,看一下文档而后跑一下 TodoList demo 就能够干活了?

当然不是。后面说到了,形象肯定存在透露。按钮须要消抖、组件嵌套不能冒泡,这些状况一旦呈现,咱们就不得不回到 timer 线程、事件机制这些底层常识的学习。甚至 Vue 的原理,例如数组绑定后不更新了、如何实现长按指令的场景,会逼迫咱们学习它的零碎机制。

后果就是,只管形象封装越来越高级,然而学习编程仍不见得变得简略。

启发

  • 形象能让咱们的生存变得便当。
  • 越来越多的高级工具会呈现,节约掉繁冗的细节工作,让开发变得疾速。
  • 咱们必须把握形象的外部机制,和底层的原理常识,能力应答形象透露。
  • 更多、更高级的形象,让调试和保护变得艰难。
  • 形象让分工变得明确。前后端难以调换,全栈工程师也会变得稀缺。
  • 形象透露导致的常识老本,让编程工作易学难精的水平加剧。
退出移动版