.NET到Node.js
从.NET到Node.js谈前后端分离实践(by vczero)
一、最初的【无分离】实践
11年末的时候,用winForm开发程序,拖拖控件,点点按钮,连接数据库,做一些基本的管理系统;Java的JSP还能包揽一切,服务器端拼接模板,顶多使用servlet做一些业务逻辑,做到后端的MVC。那时候,带了一个学校的创新团队,做一些项目,但是基本上是一个人前端后一起搞,现在想想,真是【杂乱无章】,后端MVC还好,倒是前端,基本上只能做一些简单效果,施展的空间不大,幸好,也基本能完成项目。
我称之为【无分离】实践,如果是像一个人搞,开发速度倒是挺快的。
前后端无分离实践,从.NET winForm说起,当然你要说winForm没有服务端啊,这个我后面会提到ASP.NET的分离实践以及对winFrom的思考,或者说是【端 & 服务】的思考:

在这个过程中,经历的是将后端业务理解的更清楚。为什么这里展示的是WinForm呢,而不是ASP.NET呢,主要原因有两个:一个是后面将要突出【端 & 服务】,这里将桌面程序称之为PC Client;第二个原因是后面基于ASP.NET的实践基本上做到了前后端分离。
用Java EE开发过一个数据的分析系统,是web端的,期间第一版本基本上没有前后端分离,具体的表现如下。

二、开始尝试前后端分离(基于WCF的前后端分离实践)
12年底的时候,跟着博士参加比赛,首次真正的去尝试前后端分离,想想以前写的程序和可维护性真是菜的不行。比赛要的是一个产品,而不是关心你选择的平台。因为组内就我一个学过JAVA和开发过项目,大多是学的.NET,为了平衡,于是选择了.NET。这次对前后端分离是最深刻的,整个后端的架构开始新的尝试。那时候到处都在提服务共享,于是,我到处查找资料,后来在博士的指导下看到了Restful设计。于是最终的选择方案是.NET WCF REST + MongoDB构建服务端;前端是HTML + CSS + JS + Jquery(那时候的前端还没有用MVC);服务器时IIS。
我们的项目名称是"基于XXXX的服务",后来,成果也不错,拿了不错的成绩。觉得WCF的实践还是蛮爽的,后来在师兄公司实习也做了一点WCF的服务。具体的实践如下图:

整个项目就不细说,主要是说分离的实践,贴上当时开发的作品截图(左:服务平台; 右:微旅行推荐应用,都是比赛科研项目):

思考:winForm为什么不采用这种方式呢?
本质上,我认为桌面程序是PC Client,也是客户端的一种,那么就可以采用的WCF提供服务的方式;因此,如果项目很大,一部分专注服务开发,一部分专注Client开发(包括PC && Web),那样服务就可以共享,client可以各种各样。
三、最兴奋的实践(使用Node.js做服务中间层)
参加工作到今,我所在的团队在Node.js上的实践应该有2-3年吧,至少我来之前,就有用在产品的研发中。Node.js在服务端的性能卓越,尤其是擅长IO。就昨天还跟Android平台部的同事聊天,他说Node.js给APP增添了活力和提高了整个APP的体验。当然,参加了node.js开发的几款产品,对这种方式体会更加深刻。
Node.js作为中间服务的优势,如下图所示(嘿嘿:公司产品就不贴图了,这里代表的是我个人的观点)。

四、总结
(1)把【服务平台化】,多端调用,无论是PC Client, pc web, webAPP, APP(android && ios)...
(2)专注前后端分离实践,发挥客户端的性能和功能,例会pc web的MVC.
(3)大胆使用node.js作为服务中间层,发挥基于事件和异步IO的性能优势,至少,写的一些服务的压测结果还是挺好的(当然这是node的功劳了)。
.NET到Node.js的更多相关文章
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 利用Node.js的Net模块实现一个命令行多人聊天室
1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...
- Node.js:进程、子进程与cluster多核处理模块
1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...
- Node.js:理解stream
Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...
- Node.js:Buffer浅谈
Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...
- node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法
1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
- Node.js入门(一)
一.Node.js本质上是js的运行环境. 二.可以解析js代码(没有浏览器安全级的限制): 提供系统级的API:1.文件的读写 2.进程的管理 3.网络通信 三.可以关注的四个网站: 1.https ...
- Node.js学习笔记——Node.js开发Web后台服务
一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...
- Node.js入门
开始之前,安利一本正在看的书<站在两个世界的边缘>,作者程浩,上帝丢给他太多理想,却忘了给他完成理想的时间.OK,有兴趣的可以看一看. node.js如标题一样,我也是刚开始接触,大家一起 ...
随机推荐
- 对话(VC_Win32)
资源叙述性说明对话框来定义表 格公式: 对话框名称 DIALOG[负载特性] X,Y,Width,Height[设置选项] { 对话框控件定义; } 说明: 对话框名称: 标识对话框资源,可为一个字符 ...
- jedis异常:NoSuchElementException: Timeout waiting for idle object
项目发现网络环境:java.util.NoSuchElementException: Timeout waiting for idle object 问题原因:不应该在try中释放资源.而应该在fin ...
- QlikView线图高亮选择尺寸
作为标题,如今,学生问我一个问题.尺寸Month.expression它是Count(Id). 这个图是一个折线图,不管你选择哪个月的其他下拉列表,销售量.由于Expression里面是这样写的 Co ...
- myeclipse egit 安装失败 org.eclipse.e4.ui.css.swt.theme 0.0.0
[前言] 首先确保您可能会被安装在阅读本文之前,myeclipse egit, 见文章:http://blog.csdn.net/uikoo9/article/details/17247405 事实上 ...
- redis和redis php扩展安装(转)
redis是一个内存数据库,比memcache支持更丰富的value类型,新浪微博就使用redis来做缓存. redis的源码安装 wget http://download.redis.io/redi ...
- 一个IT学生的personal statement
前一段时间的英语老师要求我们写一个自己的personal statement,我相信,作为一个IT学生,人很多personal statement应该都了如指掌.进一步的研究是必要的出国留学,当然,也 ...
- Javascript中的深拷贝和浅拷贝
var obj = { a:1, arr: [1,2] }; var obj1 = obj; //浅复制 var obj2 = deepCopy(obj); //深复制 javascript中创建对象 ...
- JQuery插件开发初探——图片轮播
在熟悉了插件开发的结构以后,自己尝试着做了一个稍微复杂一点的小功能:图片轮播插件. 由于之前使用的一款图片轮播插件,性能不高,页面加载的时候需要载入全部的图片,因此速度很慢. 通过自己做这个小插件,能 ...
- HTTP必知必会(转)
HTTP协议作为网络传输的基本协议,有着广泛的应用.HTTP协议的完整内容很多,但是其核心知识却又简单精炼.学习者应该掌握其基本结构,并且能够举一反三.这篇文章所列的,就是在实际开发中必须知道必须掌握 ...
- tortoisegit使用密钥连接服务器(转)
目录 [hide] 1 使用putty的密钥 1.1 生成putty密钥 2 在服务器上添加openssh公钥 3 在tortoisegit上使用密钥 4 putty密钥与openssh密钥转化 5 ...