这是一本具有强烈ThoughtWorks项目风格的书。书中打造的实战项目,完全遵循了ThoughtWorks工程实践,一步一步从最初的Skeleton通过快速迭代逐步丰富项目的骨肉,并在这个过程中抽丝剥茧地展现了AngularJS的诸多特性与技巧,如循循善诱的导师一步步指导着你从AngularJS的小工走向专家。
这里所谓的“专家”不仅仅是指你对AngularJS的诸多技巧尽皆了然于胸,能够挥洒自如地运用于项目开发中——若能如此,不过是“唯手熟尔”的工匠罢了。真正的专家需要从大处着手,挖掘这门技术背后隐含的设计思想与哲学,换言之,需要知其所以然;却又不偏废细节,锱铢必较每个变量函数的命名格式,使代码臻于完美,并从中提炼出能够推而广之的最佳实践。
从知其所以然入手,书中的整个第五章《背后的原理》加强了内容的深度,使得本书不致于沦落为一本Example Step by Step。书中通过对MVVM模式的阐释,解释了Angular的设计原理与启动流程,并给出了Angular开发的注意事项。书中写道:
MVVM模式的要点是:以领域Model为中⼼,遵循“分离关注点”设计原则。这也是Angular的模型驱动思维与jQuery的DOM驱动思维的显著差异。所以我们在做Angular开发的时候应该谨记以下两点:
- 绝不要先设计你的页⾯面,然后⽤用DOM操作去改变它
- Directive不是封装jQuery代码的“天堂”
又例如细节之处,本书作者仿佛是拈着针尖在跳舞,刻绘着细节纤毫毕现;又佐以代码,论证有理有据;阅读时,真好像是你和雪狼、破狼在一起结对编程呢。例如书中在提及对服务访问对象(SAO)的封装时,给出了这样两段代码:
代码语言:javascript复制
angular.module('app').controller('ReaderCreateCtrl', function ReaderCreateCtrl($resource) {
var vm = this;
var Reader = $resource('/api/readers/:id', {id: '@id'});
vm.submit = function(form) {
Reader.save(form);
};});
封装后:
代码语言:javascript复制
angular.module('app').controller('ReaderCreateCtrl', function ReaderCreateCtrl(Reader) {
var vm = this;
vm.submit = function(form) {
Reader.save(form);
};});
仅仅是寥寥几行代码的区别,却体现了作者对于代码可读性的执着追求。如此内容在书中俯拾皆是。作者对整洁代码的敏感度,就好像水银温度计对气温的感知一般,哪怕是一刻一毫都能准确感知,进而在展开的文字叙述中潜移默化地影响着读者;尤其针对初学者,作者从一开始就为他(她)们展示了什么是AngularJS之美,什么是代码之美,什么是设计之美,就好似建立了AngularJS世界的“潜规则”,入了这个圈,你需得如此如此这般这般,否则就得荆棘一路步履蹒跚。而那些优秀的工程实践例如测试驱动开发,面向模型编程,迭代的演化,一次只做一件事情的行为准则,则完全融化在文字的血液中,浓缩为简单朴实的词语,天然地点缀在整本书中,和风细雨,润物细无声。
我与本书的一位作者破狼相交甚深,虽然一直未有机会共同战斗在一个项目,却也有许多机会彼此沟通各自对设计的理解。在面向对象设计、领域驱动设计、架构设计等诸多方面,我们抱有相同的设计态度,可谓志同道合。问道技术,譬如饮酒论文,酒酣耳热时,得聆佳音,当浮一大白,人生乐趣大抵如此。虽然我对前端技术所知了了,但阅读此书,颇有许多论点刚好击中我的腑肺,那种如寻觅到知己一般的快乐,真可以说是阅读之余的额外收获了。我喜欢此书的朴实,他们没有去构架飘渺高深的理论,没有浮夸地吹嘘AngularJS是如何如何的优秀,在前端开发中所向披靡。技术人写文章,常常没有卖弄,只是踏实地表达对技术的一己之得,得到的却是字字铮铮的金石之音。
显然,这是一本工程师写给工程师阅读的书,我只可惜这本书的出版,来得有点晚了。
是为序。