Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

防作死(anti-zuo)设计

  中国有句老话叫「不作死就不会死」(no zuo no die),然而很多人却依然对「作死」这件事趋之若鹜。也就是说,我们口头上告诉别人不要作死是没用的,甚至代码规范写上不要作死也是没用的。唯一能防作死的办法唯有在语言或框架的语法上做一些限制。
  比如有些组件的作者就很不负责任地用上一堆全局变量,完全是在把全局变量当局部变量用。但我们可以把这个组件以某一形式的模块定义,那么它的全局变量将全部被局部化,于是这个作者就作死失败了。我们将成功地防止了一次作死行为,这类偷偷地让别人作死失败的方式也叫「防呆」。
  除了防呆外,更直接的方式就是从语法上阻止作死行为。一个典型的例子就是 Polymer,它的设计就有许多防作死的地方。比如模板里只支持简单的表达式,甚至连关系运算符都不支持。也许有人会觉得这个设计很操蛋,明明一个简单的判断,现在非得自己定义个方法实现。但是我觉得,有这个想法的人就非常有作死的潜质。看看 Angular 那销魂的模板吧,我简直想哭。之前刚接过一个 Angular 项目的时候,里面各种逻辑判断、三元运算符嵌套,一个表达式写了上百个字节,这还是模板么?更有甚着直接在模板中对 VM 做各种赋值操作,这恶心到不能忍。这样的模板给我一种当年在 HTML 页面中嵌入 PHP 还各种调 SQL 的即视感。然而,Polymer 把模板里的各种操作都禁止了,也许使用起来并不方便,但它直接从语法层面防止了一些人的作死行为。所以我觉得用 Polymer 是一个很难出错的框架,要想写出奇怪的 Bug 反倒不太容易。
  其实防作死这件事通常都会牺牲灵活性,但是它让一个东西变得更不容易出错,牺牲一点灵活性又何妨?还是之前的那个梗,灵活未必是优点,规矩也许更实用 。不要作死,不要作死,不要作死(重要的事情说三遍)。
网名:
54.226.58.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^