《AngularJS深度剖析与最佳实践》推荐序

这是一本具有强烈ThoughtWorks项目风格的书。书中打造的实战项目,完全遵循了ThoughtWorks工程实践,一步一步从最初的Skeleton通过快速迭代逐步丰富项目的骨肉,并在这个过程中抽丝剥茧地展现了AngularJS的诸多特性与技巧,如循循善诱的导师一步步指导着你从AngularJS的小工走向专家。

这里所谓的“专家”不仅仅是指你对AngularJS的诸多技巧尽皆了然于胸,能够挥洒自如地运用于项目开发中——若能如此,不过是“唯手熟尔”的工匠罢了。真正的专家需要从大处着手,挖掘这门技术背后隐含的设计思想与哲学,换言之,需要知其所以然;却又不偏废细节,锱铢必较每个变量函数的命名格式,使代码臻于完美,并从中提炼出能够推而广之的最佳实践。

从知其所以然入手,书中的整个第五章《背后的原理》加强了内容的深度,使得本书不致于沦落为一本Example Step by Step。书中通过对MVVM模式的阐释,解释了Angular的设计原理与启动流程,并给出了Angular开发的注意事项。书中写道:

MVVM模式的要点是:以领域Model为中⼼,遵循“分离关注点”设计原则。这也是Angular的模型驱动思维与jQuery的DOM驱动思维的显著差异。所以我们在做Angular开发的时候应该谨记以下两点:

  • 绝不要先设计你的页⾯面,然后⽤用DOM操作去改变它
  • Directive不是封装jQuery代码的“天堂”

又例如细节之处,本书作者仿佛是拈着针尖在跳舞,刻绘着细节纤毫毕现;又佐以代码,论证有理有据;阅读时,真好像是你和雪狼、破狼在一起结对编程呢。例如书中在提及对服务访问对象(SAO)的封装时,给出了这样两段代码:

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);
  };});

封装后:

angular.module('app').controller('ReaderCreateCtrl', function ReaderCreateCtrl(Reader) {
  var vm = this;
  vm.submit = function(form) {
    Reader.save(form);
  };});

仅仅是寥寥几行代码的区别,却体现了作者对于代码可读性的执着追求。如此内容在书中俯拾皆是。作者对整洁代码的敏感度,就好像水银温度计对气温的感知一般,哪怕是一刻一毫都能准确感知,进而在展开的文字叙述中潜移默化地影响着读者;尤其针对初学者,作者从一开始就为他(她)们展示了什么是AngularJS之美,什么是代码之美,什么是设计之美,就好似建立了AngularJS世界的“潜规则”,入了这个圈,你需得如此如此这般这般,否则就得荆棘一路步履蹒跚。而那些优秀的工程实践例如测试驱动开发,面向模型编程,迭代的演化,一次只做一件事情的行为准则,则完全融化在文字的血液中,浓缩为简单朴实的词语,天然地点缀在整本书中,和风细雨,润物细无声。

我与本书的一位作者破狼相交甚深,虽然一直未有机会共同战斗在一个项目,却也有许多机会彼此沟通各自对设计的理解。在面向对象设计、领域驱动设计、架构设计等诸多方面,我们抱有相同的设计态度,可谓志同道合。问道技术,譬如饮酒论文,酒酣耳热时,得聆佳音,当浮一大白,人生乐趣大抵如此。虽然我对前端技术所知了了,但阅读此书,颇有许多论点刚好击中我的腑肺,那种如寻觅到知己一般的快乐,真可以说是阅读之余的额外收获了。我喜欢此书的朴实,他们没有去构架飘渺高深的理论,没有浮夸地吹嘘AngularJS是如何如何的优秀,在前端开发中所向披靡。技术人写文章,常常没有卖弄,只是踏实地表达对技术的一己之得,得到的却是字字铮铮的金石之音。

显然,这是一本工程师写给工程师阅读的书,我只可惜这本书的出版,来得有点晚了。

是为序。

原文发布于微信公众号 - 逸言(YiYan_OneWord)

原文发表时间:2016-03-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

Python之父二三事

我以前提到过Guido van Rossum,Python之父,就是他用一部英国喜剧《蒙提·派森的飞行马戏团》(Monty Python and the Fly...

3549
来自专栏大数据文摘

Science最新研究:AI通过追踪光标移动,线上勘破骗局

1648
来自专栏大数据文摘

想不到!居然利用DNA存储数据

35512
来自专栏BestSDK

勾引程序员的11个方法,第4招百试不爽

一、写纯文本格式的邮件 ? 程序员通常不喜欢你那些花里胡哨的邮件——比如粉红的标题、粗体的HTML格式的邮件内容、并且还内嵌图片。他们喜欢的是简洁命令的纯文字表...

78510
来自专栏互联网杂技

无框界面

什么是无框界面 纵使几大设计风格已形成寡头垄断(如苹果的圆角玻璃、谷歌的层级、微软的方块…),但界面设计的进化历程才刚刚开始。 我曾在之前的《[译文] 去形式...

3556
来自专栏企鹅号快讯

用python爬取自己的朋友圈,得到的信息超过你的想象!

微信作为一款拥有将近9亿用户的超级APP,已经成为很多人生活中不可或缺的一部分,聊天、分享动态、阅读资讯、购物支付……微信就像一张移动互联网的身份证,拥有它就能...

57110
来自专栏CDA数据分析师

如何用 Python 爬取自己的微信朋友

微信作为一款拥有将近9亿用户的超级APP,已经成为很多人生活中不可或缺的一部分,聊天、分享动态、阅读资讯、购物支付……微信就像一张移动互联网的身份证,拥有它就能...

2849
来自专栏我有一个梦想

游戏开发完整学习路线(各个版本都有)

在软件开发中,游戏开发这个方向看起来目标很明确,但其实是个领域很广的方向,入门的时候如果得不到指点一二,很容易误入歧途,相反,如果走这条路之前能得到前人的一些指...

3808
来自专栏大数据和云计算技术

速度比你想的重要

效率高的明显好处是:单位时间内能完成更多的工作。但这只是冰山一角,假如工作速度快,你就会倾向于低估做事的成本,因此乐于完成更多的工作。 举个例子,假设你每写一...

3398
来自专栏ThoughtWorks

如何快速读Paper

自从上次介绍了去哪里找paper之后,大家问我的问题就常常变成了:如何快速阅读一篇paper并准确的提取其中有用的信息。在本文中,我将试图为大家简要解答这个问题...

2932

扫码关注云+社区

领取腾讯云代金券