原文链接: From Java to Node.js

特别说明:感谢大家积极参与【iTran乐译】第3期

我做开发有些年头了,也使用过不少开发语言。然而尽管这样,当我干自己的活时,我总是倾向于使用Java。或许有一部分原因是出于习惯,有一部分原因是在我看来Java有最好的开源项目可供选择,还有部分原因是我喜欢Java的特性和高效。

即使在web“竞技场”中,新语言,新方法(Ruby on rails,Play!,Lift等等)大行其道的时候,我还是选择了Java。尽管我认可这些框架的优势,但是我从来没有觉得有必要研究下它们是如何工作的。虽然我不止一次认可它们,但是最后我还是回到了Java中使用Spring(或ORM)实现纯粹的REST-ful services和一个富JS前端。

近期,两个因素让我深入到了Node.js。第一是我对于不断进步的JavaScript前端的赏识与日俱增。一个过去仅仅用来验证表单提交的JS小片段现在已经演化成了一个完整的技术生态系统,框架和函数库。这些天,我个人的最爱是Backbone.js。任何时候我都尽我所能去使用它。

第二是从一个在Voxer的朋友那里得到的第一手的反馈关于他们在真实的构架下使用和开发Node.js的巨大成功。

所以我也“陷”了进去。在很短的一段时间里我已经把它应用在几个真实项目里了。我可以说它是我语言选择的新欢。

首先,它的基于事件驱动的模型完美地适合服务器端的开发。尽管其他语言也有这个特性(Java Servlet 3.0, Event Machine, Twisted to name a few),但是它把JavaScript的易用性和成熟性联系在了一起。在AJAX中,我们都习惯使用回调函数不是么?

第二,Node.js出现很短一段时候后,它的社区已经非常庞大了。那里有许多有用的开发库能解决你的问题,他们的质量也非常高。

第三,它简单易学。依靠Node库和特性集合,他们可以帮助你快速构建需要的东西。

说了那么多以后,我想分享一些资源,他们能帮助有Java背景的你快速地学习Node.js。

JavaScript入门

我在下文列出了许多关于Node.js的资源。但对于我来说,最关键的是让我的JavaScript知识上一个台阶。你将把所有的时间花在使用JS书写服务端代码上,所以工欲善其事必先利其器。

作为一个Java开发者,你可能已经被训练成以面向对象的设计方式来进行思考了。对于我来说,这也是我最关注的部分。幸好,JavaScript不是一个典型的面向对象的语言。你可以在JS中实现OO编程,但是那样也违背了JS的初衷。

这里是一个JavaScript资源列表:

  1. JavaScript: The Good Parts - Definitely a requirement 第4和第5章节(函数,对象和继承)对于有OO背景的人来说是最重要的部分。

  2. Learning Javascript with Object Graphs (第2,3部分) – howtonode.org有许多好的Node材料,但是第三部分可以让你对整本书有一个很好的理解。

  3. Simple “Class” Instantiation – 我最近读的另一篇帖子。值得一读。

学习Node.js

有了一个好的JavaScript背景,开始学习使用Node.js是非常直接的。需要理解的最主要的部分是I/O的异步性和通过产生/消费事件来完成工作。下面是一个我用来快速入门的列表:

  1. DailyJS’s Node Tutorial - DailyJS博客的Node教程连载。这是一个非常好的资源,值得从头到尾读一遍。
  2. Mixu’s Node Book - 不完整,但是仍值得读。我期待阅读后续章节。

  3. Node Beginner Book – 很好的入门材料。

  4. How To Node – 关于Node.js的博客(标记一下)。

我觉得看完这些东西会让我更有动力去学习Node。但愿你也能感受的到(非常感谢这些作者能腾出时间来分享他们的知识!)。

框架?

Java中有许多开源框架。那也是Java流行的原因。尽管Node.js非常新,已经有许多人完成了大量的工作并把他们的代码共享出来。以下是我认为一些在Node.js中与流行的Java框架相对应的东西(就我目前所知的)。

Web MVC

在Java的世界里,许多人熟悉Web MVC框架不Spring MVC, Struts, Wicket, and JSF。近期的趋势更是倾向于客户端JS的MVC框架比如Ember.js(SproutCore)和Backbone.js。

尽管如此,一个有竞争力的Node.js web框架是Express框架。从某种意义上来说,它甚至超越了一个web框架因为它同样提供了大多数web server的功能(大多数Java开发者习惯使用的Tomcat, Jetty等)。更具体的说Express是基于Connect的。它的设计经过了反复推敲的,它提供了特性集刚好能帮助你完成工作。

应用程序生命周期管理框架(依赖注入框架)

在Java世界里,Spring是一个非常流行的框架,它提供了一堆的胶水与抽象功能。它具有依赖注入,测试,对象生命周期管理,事务管理等功能。它总是我新项目考虑的第一个框架。

在Node.js中…我却一点也不想念它。JavaScript有更灵活的解耦方式,所以我不觉得我需要找一个替代品(译:在Java里我也觉得Spring是个多余的东西)。也许生活会更好?

关系映射 (ORMs)

我对ORM有着复杂的情感,但是它有时确实让你的生活更简单。Node.js里的ORM没有什么缺憾。自由选择吧。

测试框架

Java里有许多这样的框架,比如Junit。同样也有许多做mock的库,stub库,DB测试的库等等。Node.js也有许多。根据你的情况选择。我觉得nodeunit比较流行,它类似于jUnit。我个人使用Mocha测试。测试工具可以根据个人爱好来选择,但是好在有许多好的东西可供选择。

日志

当选择log库时,Java开发者总是有一大堆的选择。Commons logging, log4j, logback, and slf4j 是一些比较流行的log库。Node.js同样也有许多。我目前使用winston,还没碰到什么问题。它有同样logging levels, multiple transports(log4j中的appender)和异步日志。

译注:由于原来页面被墙,只能通过在线代理访问,导致不能获取原文中正确的超链接(在线代理会将原文中的超链接自动转换成在线代理浏览的形式),请见谅。