从.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. 一C++PSO(PSO)算法

    收集和变化PSO算法,它可用于参考实施: #include <cstring> #include <iostream> #include <cmath> #incl ...

  2. mybatis以序列周期,同样处理的这个问题的价值

    原因猜测缓存,由于代码是肯定没问题,但无论怎么查都一样值 <select id="querySeq" resultType="java.lang.Long" ...

  3. 一起写2048(160行python代码)

    前言: Life is short ,you need python. --Bruce Eckel 我与2048的缘,不是缘于一个玩家.而是一次,一次,重新的ACM比赛.四月份校赛初赛,第一次碰到20 ...

  4. [HA]负载均衡:HAPROXY与KEEPALIVED强强联合

    第一步:更改系统控制配置文件,同意分配虚拟IP(VIP) /etc/sysctl.conf net.ipv4.ip_nonlocal_bind=1 <pre style="word-w ...

  5. hdu 3683 Gomoku (模拟、搜索)

    Gomoku Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  6. android在当前app该文件下创建一个文件夹

    /*********************************************************************  * Author  : Samson  * Date   ...

  7. Visual Prolog 的 Web 专家系统 (6)

    保存用户响应询价.作为进一步推理的条件 或GOAL段开始.最初的一句是write_startform() write_startform():- write("<form action ...

  8. SWOT分析是神马?

    SWOT分析是思维的工具来理解事物的方式.人生在世,作为一个独立的实体,不可避免地需要思考的问题.除非你是猪.猪比这更聪明.眠质量,都要完爆白领,蓝领和金领们. SWOT分析分为四个象限.我们用一头名 ...

  9. 优秀团队建设--美国式团队(ppt)

    美国式团队 一.团队精神 团队精神反映一个人的素养.一个人的能力,一个人与别人合作的精神和能力.一个团队是个有机的总体,作为个人,仅仅有全然融入到这个有机总体之中,才干最大限度地体现自己的价值. 团队 ...

  10. 流动python - 写port扫描仪和各种并发尝试(多线程/多进程/gevent/futures)

    port扫描仪的原理非常easy.没有什么比操作更socket,能够connect它认为,port打开. import socket def scan(port): s = socket.socket ...