翻开《精通Dojo》,封面和目录那股子硬核劲儿扑面而来。不赶时髦,也不整“三天精通”的速成套路。倒像某个头发渐稀的老工程师,在工位上熬了几个通宵,硬攒下来的实战笔记。书里分成了四个大块:先教你怎么快速搭起Ajax应用;接着扎进Dojo Core底层扒代码;然后啃Dijit小部件系统;最后,把活儿落在富互联网应用的架构设计上。作者把话撂得挺明白,这书是留给有过Web编程底子的人看的。你要是真拿它当API字典查,那可真是亏大了。它骨子里想塞给你的,是一套把零散脚本捏合成完整应用的工程脑子。这事儿大概就是这么个意思。别指望看两页就能上手改线上Bug。真得慢慢咂摸。
啃第一部分的时候,我盯着屏幕发了会儿呆。作者反反复复敲打一个词:Dojo不是随便凑合的程序库,而是个严丝合缝的工具包,概念上得整整齐齐。这话刚看觉得挺平常。真上手写项目,啪的一下就砸脸上了。咱们写前端的时候,是不是老爱搞“代码拼图”?表单验证自己憋一套,发请求再拽段现成的,页面跳转又随便拼一块儿。最后代码库胖得,连自己IDE都卡得动不了。书里拿dojo.declare和模块化加载当例子,实打实地教你怎么把对象、继承、属性混合这些JS原生特性捋顺。等你真用聚合和多继承搭类,靠按需加载卡死依赖,代码就不至于像流水账一样乱窜,脊梁骨也就立起来了。说句掏心窝子的话。刚看这章我直撇嘴,觉得为了结构搞结构纯属过度设计。可等你真被一个得频繁改动的中后台系统折磨得掉头发,那种改一处崩三处的酸爽,立马教你做人。原来前期的死磕,全是为了后期能喘口气。可能每个程序员,都得交这么一笔“架构税”吧。
讲到异步请求和事件绑定那几章,作者没玩虚的,直接给你把底层逻辑扒得干干净净。JS这东西,天生就带异步的毛病。用户戳一下按钮。服务器吭哧吭哧吐数据。页面再慢吞吞地刷出来。时间轴上,全挤在一起。书里把延迟对象和回调函数怎么管、怎么调,掰开揉碎讲了一遍。连上下文绑定怎么救回丢失的作用域,都给你标得明明白白。这技术看着冷冰冰。其实跟过日子挺像。咱们平时干活,老被弹窗消息打断,干着急等结果。学异步编程,说白了,就是学怎么不傻等。你不用让程序干耗着,把触发条件设好,剩下的甩给时间就行。我觉得吧,这章写得挺实在。虽然Dojo现在用的人不多,但它讲清楚的那个“非阻塞”逻辑,放到现在的Promise或者async/await里,底层道理根本没变。
书一合上,我脑子里全是我以前接手烂尾项目时的惨状。满屏的页面加载事件跟套娃似的条件判断,缠成死结,解都解不开。《精通Dojo》没在语法上打转,它硬是把数据存储器、小部件生命周期、主题样式继承这些散落的珠子,用一根线给串起来了。它把话挑明:前端不是贴层皮,是打地基盖楼。桩打得不牢,往上加楼层随时得塌。现在前端圈子换框架比换衣服还勤,但书里死磕的模块化思想、数据和视图拆开玩、组件化封装这些底子,到今天照样顶用。工具换了一茬又一茬,搭系统的门道却没变过。下次再让你头疼一堆乱糟糟的交互需求,先往后撤两步。问问自己:我是要写一堆能跑的代码,还是要搭一个能生长的系统?不过话说回来,Dojo这老物件毕竟年代久了,咱们取其“工程化”的魂就行,真要去死磕它的语法细节,可能真有点跟自己过不去。