从.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的功劳了)。

——前端工程如此浩大,孜孜不倦,孜孜不倦(专注前端&Node.js)
 
分类: JavaScriptNode.js

.NET到Node.js的更多相关文章

  1. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  2. 利用Node.js的Net模块实现一个命令行多人聊天室

    1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...

  3. Node.js:进程、子进程与cluster多核处理模块

    1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...

  4. Node.js:理解stream

    Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...

  5. Node.js:Buffer浅谈

    Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...

  6. node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法

    1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...

  7. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

  8. Node.js入门(一)

    一.Node.js本质上是js的运行环境. 二.可以解析js代码(没有浏览器安全级的限制): 提供系统级的API:1.文件的读写 2.进程的管理 3.网络通信 三.可以关注的四个网站: 1.https ...

  9. Node.js学习笔记——Node.js开发Web后台服务

    一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...

  10. Node.js入门

    开始之前,安利一本正在看的书<站在两个世界的边缘>,作者程浩,上帝丢给他太多理想,却忘了给他完成理想的时间.OK,有兴趣的可以看一看. node.js如标题一样,我也是刚开始接触,大家一起 ...

随机推荐

  1. opencv-形态处理

    开运算 (Opening) 原理摘自:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/opening_closi ...

  2. Windows Phone 启动器

    http://msdn.microsoft.com/zh-CN/library/gg278408(v=vs.92)#BKMK_Launchers using Microsoft.Phone.Contr ...

  3. 谁占用了我的Buffer Pool

    原文:谁占用了我的Buffer Pool 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/01/11/buffer-pool.aspx 我在做SQL S ...

  4. IOS开发——Protocol使用协议

    protocol ['prəutəkɔl] (样例:http://blog.sina.com.cn/s/blog_6aafe9c90100yozz.html ) 一.说明  两个类进行通讯,用协议就比 ...

  5. Eclipse Maven构建Spring MVC项目

    工作中项目开发使用Maven管理项目的构建.打包.编译,框架採用的是Spring MVC框架,而且实现了多模块.多项目的管理.自己也简单的參与了架构的设计.对于刚開始学习的人来说,使用Maven构建项 ...

  6. CentOS7 安装NFS SSH免密码登陆

    配置5台虚拟机 ip为192.168.1.160 - 164,使用160作为共享服务器 使用yum安装nfs 以及rpcbind,有很多文章介绍,这里不再赘述 一.启动服务 1.启动rpcbind s ...

  7. Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装

    原文:Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装 Linux内核分析(一) 从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底 ...

  8. Swift: 打造滑动解锁文字动画

    原文:Swift: 打造滑动解锁文字动画 最近木事,找出来玩了玩facebook的paper.到处都是那个"slide to unlock your phone"的效果啊.忽闪忽闪 ...

  9. 30分钟让你了解MongoDB基本操作(转)

    今天记录下MongoDB的基本操作,这只是最基本的,所以是应该掌握的. 数据库 数据库是一个物理容器集合.每个数据库都有自己的一套文件系统上的文件.一个单一的MongoDB服务器通常有多个数据库. 集 ...

  10. [ACM] POJ 2418 Hardwood Species (Trie树或map)

    Hardwood Species Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 17986   Accepted: 713 ...