从.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. SQL Server高可用——日志传送(4-3)——使用

    原文:SQL Server高可用--日志传送(4-3)--使用 顺接上一篇:SQL Server高可用--日志传送(4-2)--部署 本文为本系列最重要的一篇,讲述如何使用日志传送及一些注意事项.从上 ...

  2. n每个计数的概率和发生骰子--动态规划

    称号:该n骰子在地板上.所有点骰子的向上一面和一个S.进入n,打印S所有可能的值的概率. 声明思想非原创!仅仅因动态规划思想的使用非常好,记下. 分析:动态规划就是分阶段考虑问题.给出变量.找出相邻阶 ...

  3. 怎么样sourceforge开源项目发现,centos安装-同htop安装案例

    一个.htop什么? top是linux下经常使用的监控程序.htop相当于其加强版,颜色显示不同參数.且支持鼠标操作. 详细介绍參看此说明文档. watermark/2/text/aHR0cDovL ...

  4. 学习笔记 一步步了解webpack

    前言 demo 地址: https://github.com/yy8597/webpack-demos 之前学习了 broswerify,发现确实很好用.虽然没有 grunt 那样丰富的配置和插件,但 ...

  5. Think in Java(一):Java基础

    一. OOP的特点 (1) 万物皆为对象; (2) 程序是对象的集合,他们通过发送信息来告诉彼此所要做的; (3) 每一个对象都有自己的由其它对象所构成的存储; (4) 每一个对象都拥有它的类型; ( ...

  6. nodejs使用connect-mongodb报错(Please ensure that you set the default write concern)

    原本是使用connect-mongo的,可能是express版本号的升级报错了.改用connect-mongodb.可是使用后出现了例如以下的警告: G:\nodejs\moviesite>gr ...

  7. Linux/UNIX先进I/O

    先进I/O 非阻塞IO 非阻塞I/O因此,我们可以称之为open.read和write这种I/O操作,而这些操作不会永久阻止.我们假设,该操作不能完成,然后调用立即返回一个错误.则表示该操作将继续作为 ...

  8. 光流和KLT

    一 光流 光流的概念是Gibson在1950年首先提出来的. 它是空间运动物体在观察成像平面上的像素运动的瞬时速度.是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存 ...

  9. 怎样在多线程中使用JNI?

    假设你想了解JNI在怎样在多线程下使用 假设你在子线程使用JNI时遇到findClass不能找到目标Class,而在主线程下却能找到该Class的问题.或是GetEnv返回NULL的问题 假设你想多学 ...

  10. 下载文档--Struts2中国的文件下载被显示为空间的问题

    下载文档--Struts2中国人似乎是空文件下载格问题 前言:近期公司项目中用到文件下载,依据底层,决定使用struts2的文件下载模式. 乱码大多数都攻克了,竟然出现中文文件下载时,中文文字显示为空 ...