几年前,完全放弃Asp.net,彻底脱离微软方向。Web开发,在公司团队中,一概使用Node.js、Mongodb、Git,替换Asp.net mvc、Sql server和Tfs。当时来看,这是高风险的决定。所有人都习惯了Asp.net,知识和技术积累也集中在这个方向。

表面看来,仅仅是我个人对多年跟从微软的厌烦,导致整个技术路线嘎然而止,从技术角度而言,团队由此南辕北辙。几年过去,各种辛苦和折腾,间或的彼此抱怨之后,我们终于天经地义的,习惯了新的方向,没有人再有回到Asp.net的意思,恍若隔世,但...一定要比较,今天显然更为轻松。

当然,最初并非一切顺畅,每个选择,每一方都是王婆婆,她的瓜绝对是举世无双滴。面对诸多王婆的时候,我们也很难得到客观的比较,选择往往需要自己来做。经过两个项目,才真正让一切顺畅起来。其中所涉的编程方式、各类细节甚至由此引发的不同设计思维,很明显经历了多处的反复。这个没有办法,node.js相对较新,大规模在一些公司应用的情形并不多,这类文字当然也稀少,我们很难找到其他人归纳的常规的团队开发模式。

我简单的描述一下,对于以Node.js为主的公司,嗯,仅仅局限于中小型公司...或许有一定的帮助,少走些弯路。我们最终的选择是

1、IDE:Webstorm,没有其他。

2、版本管理系统:Git,独一无二。

3、单元测试:jsamine,前后端共用。

4、前端框架:Angular.js,让ember.js和几个老牌的框架性感的躺在床上吧。

5、服务端:纯静态页面+极少使用Jade+REST

6、socket.io+独立小模块:当然,这几乎是唯一可选的与客户端双向通信的方式。但一定要注意,多数情形下,我们只有很少的机会需要服务端推送,将这部分内容作为独立的小应用,是非常省事的做法。

7、异步流程控制:Promise是唯一选择,而且从一开始就要强制使用,绝不可忽略,这关系到设计思维的巨大差异,甚至关系到我们是否真正能够在node.js方向坚持下来。我们用Q.js,和前端Angular.js使用的微缩版Q.js保持一致,减少学习周期。

8、前后端共用代码:只要前端有可能用到的代码,必须以符合规范的方式,做到前后端共用。

我知道多数的多数的,还是多数的技术文章,说话都是不极端的、中庸的,在肯定一到两个选择的时候,也会认同其他的选择,嗯,这固然是很成熟的文风,很厚道的人格。我呢,只会极端的就每个选择给出唯一的答案。

不是因为我性情不成熟,嗯,好歹我也算是超级资深的架构师、高级程序员、过程管理大半个专家...啊,还有没有其他的光环和帽子可戴?

既然我们在集中选择中左右碰撞后,得出了结论,我们的选择就是唯一的...多数情况下,您看到这篇随手的文字,就不再需要将这个痛苦的过程,重复一遍。我觉的这是真正的厚道...那么多客气干嘛?噢,这可能有点"你们不用思考,元首都帮你们思考过了"的意思,这点不好...我在下面将几种主要选择的理由,列出来...以避免从天而降的、聚合成团队的板砖。

一、IDE的选择:WebStorm

我们最初遇到的问题,是语言,C#转到js。 当然,这个事实上不是太大的问题,Asp.net方向的团队,基本上每个人都有相关语法知识。尤其开心的是,node.js,在后端开发,不需要如前端开发一般,考虑浏览器差异。最初大家的共识是很简单的思维:js+node系统库+诸多可选的包=C#+.net framework。额,当然,整个node.js占据的空间大约只有十来兆,IIS和.net framework加起来是多少?几十倍的体积差别,即使两者旗鼓相当,是不是该鄙视下,那过于吝啬硬盘的一方?

当然,要开始,第一个问题是IDE。最初,我一个人左右折腾,使用Visual studio+iisnode+Tfs,各种不便。1周后转到Webmetrix,3天后灰溜溜的放弃。然后各种ide象流水般的试试...WebStorm最初也被排斥。

在一个月黑风高的深夜,一双迷茫的眼睛,盯着天花板。

我重新捡起WebStorm,更精细的一步步尝试它所宣称的各类特性。语法自动感知、node.js的调试、Git集成、单元测试框架的集成....

嗯,一切之外的选择变成了浮云。

二、版本管理系统:Git

选择Git,最初是因为Tfs不再可用,我们已经告别了伟大的Visual Studio 20XX。那么...风评最好的,显然是Git,GitHub已经成长到让其他的开源社区瞠目结舌的地步,甚至Tfs也不得不支持Git。这不免太庸俗:人人一边倒的说一个东西好,这东西就是好。

但是,但是那个但是...这东西用起来比Tfs麻烦许多噢,我们都不算是喜欢一个个敲命令的人吧?我本人率先使用,然后培训其他人,先行的过程虽然持续三天...但是:

1、分布式确实是最人性的做法:不再需要家中和公司服务器同步来同步去,不在同一城市也不再是问题。

2、分支成为主要的思维...前提是合并、冲突惊人的简易。

3、最为欣喜的是,结合WebStorm,几乎达到了VS中使用Tfs的效果,我们已经有几年不再手工输入命令了。

那么,你还需要考虑别的?

三、单元测试:Jasmine

这个选择,纯粹是由于我天生的懒惰。 前端Angular.js,单元测试用karma...jasmine,我开始尝试在服务端使用jsmine,到解决了与ide集成、Promise测试之后,我们还需要用不同的方式来做单元测试吗?

四、异步流程控制:Promise,Q.js

茴香豆的茴,有N种写法。所以,专家告诉我们,处理异步流程,除了回调函数方式外,还有事件方式、订阅发布模式、Promise。我的答案只有一个,Promise,in Q.js。 在我们第一个项目中,我们避免使用太多第三方库,所有异步流程的处理,均老老实实的用嵌套得晕死的回调函数处理。这个,虽然折磨了大家,但很明显是每个人可以快速的理解、快速做到的。不过,第一个项目中,遇到有十几个步骤的复杂计算的时候,层层嵌套几乎令我们团队出现一位精神失常者...为了避免家长打上门来,老将出马...我用了一个通宵,在async.js(一个几乎居垄断地位的异步流程库)、Q.js以及其他一些方式中徜徉。

很惭愧的说,Promise的理解看似轻松,但在两个小时的时间里,我发觉自己很难真正的理解,这是很少见的事情,我照着镜子,看着那一向自以为性能不错的人类脑袋,沮丧的叹息。在项目进度的压力下,我选择了async.js...

之后的空闲时间,我终于经过两次波折,彻底的理解Promise的概念、使用的细节。在第二个项目开始之前,我用2天的时间在团队传播,并订下了非常不近人情的编程规范:本项目不允许出现回调函数方式、不允许使用async、只准使用Q.js Promise。所有不符合此规范的代码将被退回,所有于此有关的问题我会随时解答。

原因是什么?如果没有Promise,node.js的编程将是一个异常枯燥、乏味、不可靠、江湖风格的苦差。我上升到这个高度,估计会面对有一千个番茄加两千个鸡蛋,但,信者得永生。扁平的流程处理,统一的编程模式,链式的编程风格,无与伦比的异常处理。async.js实现的异步流程,所有的代码是相关的。Promise则可以做到各步骤全不相关,嗯,想到了最基本的"封装"了吧?这就是所有的理由,之所以选择Q,也是降低学习的难度---我们在angular.,js前端,已经模糊的使用微缩版的q.js了。

五、前端框架:Angular.js

前端框架,近年如同地下世界的老鼠,数量十分庞大。

Angular.js、微软的Knockout、某人推崇为第一的ember.js....等等等等。

我测试过多种之后,选择angular.js,这是入门简易,但学习曲线陡峭的框架。理由:我比较后,发现angular.js的代码量比多数的框架,精简许多,在理想和现实中折中得相当平衡。结合REST,我们几乎可以方便的制作全静态的应用,当然,每个地方都是无刷新的。

没有草稿,随手而写,好象也没有什么修改。其他的几个选择,相对而言更好理解一些,不罗嗦。使用mongodb或许是一个错误...不支持事务,是个很要命的问题。但也坚持很久了...我们的团队,始终是不能回避nosql的,而nosql的第一选择,目前仍然是mongodb,至少从思维方面,大家目前已经非常熟悉和习惯。node.js真正的在企业中作为主力方向,国内估计并不太多,很多资料匮乏。我建了119874409群,欢迎诸位同好交流。

node.js的年龄,已经十岁,似乎并不容易成为真正的主流之一,但我本人,仍然很看好今后的发展,考虑到其轻松跨平台、独特的异步模式、与C++天然的亲和,甚至在桌面开发、安卓平台上的一些尝试,node.js极可能成为重要的技术方向之一。

介绍Node.JS的更多相关文章

  1. 学习node.js 第2篇 介绍node.js 安装

    Node.js - 环境安装配置 如果愿意安装设置Node.js环境,需要计算机上提供以下两个软件: 一.文本编辑器 二.Node.js二进制安装包 文本编辑器 这将用来编写程序代码. 一些编辑器包括 ...

  2. Node.js 介绍及安装

    Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装.本文详细介绍了No ...

  3. node.js当中的http模块与url模块的简单介绍

    一.http模块的简单介绍 node.js当中的http内置模块可以用于创建http服务器与http客户端. 1.引包 const http = require('http'); 2.创建http服务 ...

  4. Node.js介绍、优势、用途

    一.Node.js介绍Node.js是一个javascript运行环境.它让javascript可以开发后端程序,实现几乎其他后端语言实现的所有功能,可以与PHP.Java.Python..NET.R ...

  5. Node.js NPM 介绍

    章节 Node.js NPM 介绍 Node.js NPM 作用 Node.js NPM 包(Package) Node.js NPM 管理包 Node.js NPM Package.json NPM ...

  6. Node.js 介绍

    章节 Node.js 介绍 Node.js 入门 Node.js 模块 Node.js HTTP模块 Node.js 文件系统模块 Node.js URL模块 Node.js NPM Node.js ...

  7. Node.js 从零开发 web server博客项目[项目介绍]

    web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...

  8. Node.js 教程 05 - EventEmitter(事件监听/发射器 )

    目录: 前言 Node.js事件驱动介绍 Node.js事件 注册并发射自定义Node.js事件 EventEmitter介绍 EventEmitter常用的API error事件 继承EventEm ...

  9. Node.js 学习资源

    这篇文章编译整理自Stack Overflow的一个如何开始学习Node.js的Wiki帖,这份资源列表在SO上面浏览接近60万次,数千个收藏和顶.特意整理发布到这里,其中添加了部分中文参考资料. 学 ...

随机推荐

  1. Django配置邮箱登录

    1.settings下配置 # AUTH 方法(支持邮箱登录) AUTHENTICATION_BACKENDS = ('users.views.CustomBackend',) 2.views下逻辑如 ...

  2. POJ 2763 Housewife Wind 树链拋分

    一.前言 这破题WA了一天,最后重构还是WA,最后通过POJ讨论版得到的数据显示,我看上去是把某个变量写错了..于是,还是低级错误背锅啊....代码能力有待进一步提升2333333 二.题意 某家庭主 ...

  3. 【Keepalived+MySQL】MySQL双主互备+高可用

    一.基本信息说明 [DB1] IP: 192.168.102.144 hostname: LVS-Real1 [DB2] IP: 192.168.102.145 hostname: LVS-Real2 ...

  4. day10 消息队列,多进程和多线程以及协程,异步IO,事件驱动等

    回顾一下线程和进程 线程与进程的区别 守护线程: 队列: 两种方式: 先进先出  # 后入先出   #卖水果,后来的来的是新的 生产者消费者模型: 生产包子, 吃包子 事件 event: 红绿灯模型 ...

  5. netcfg.exe

    netcfg.exe 编辑 本词条缺少信息栏.名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!   目录 1 简介 2 可能出现问题 简介编辑 netcfg.exe是Kaspersky的 ...

  6. DEDE调用指定文章ID来调用特定文档

    http://www.jb51.net/cms/137423.html 代码如下: {dede:arclist row=1 idlist='6'} <li><a href=" ...

  7. 如何将Linux rm命令删除的文件放入垃圾箱

    因为rm命令删除的文件是不会放入垃圾箱的,所以无法恢复,下面小编就给大家介绍一种方法,通过替换Linux rm命令的方法,从而将rm命令删除的文件放入垃圾箱. 方法: 1. 在/home/userna ...

  8. jqgrid postData setGridParam 调用多次时查询条件累加的问题

    var postData = $(gridId).jqGrid("getGridParam", "postData"); $.each(paras, funct ...

  9. File IO(NIO.2):什么是路径?

    简介 文件系统以某种形式的媒体(通常为一个或多个硬盘驱动器)存储和组织文件,使得它们可以容易地被检索.目前使用的大多数文件系统将文件存储在树形(或分层)结构中.在树的顶部是一个(或多个)根节点.在根节 ...

  10. alpha(4/10)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:冲刺4 团队部分 后敬甲 过去两天完成了哪些任务 文字描述 主页部分图标的替换 -拍照按钮的设计和测试 GitHub代码 ...