zoukankan      html  css  js  c++  java
  • 基于NodeJS进行前后端分离

    1.什么是前后端分离

     传统的SPA模式:所有用到的展现数据都是后端通过异步接口(AJAX/JSONP)的方式提供的,前端只管展现。

    从某种意义上来说,SPA确实做到了前后端分离,但这种方式存在两个问题:

      • WEB服务中,SPA类占的比例很少。很多场景下还有同步/同步+异步混合的模式,SPA不能作为一种通用的解决方案。
      • 现阶段的SPA开发模式,接口通常是按照展现逻辑来提供的,而且为了提高效率我们也需要后端帮我们处理一些展现逻辑,这就意味着后端还是涉足了view层的工作,不是真正的前后端分离。

    现阶段:从职责上划分才能满足目前我们的使用场景:

    • 前端:负责View和Controller层
    • 后端:只负责Model层,业务处理/数据等。

    2.怎么做前后端分离

    • 前端:负责View和Controller层
    • 后端:只负责Model层,业务处理/数据等。

    MVC分

    试想一下,如果前端掌握了Controller,我们可以做url design,我们可以根据场景决定在服务端同步渲染,还是根据view层数据输出json数据,我们还可以根据表现层需求很容易的做bigpipe,comet,socket等等,完全是需求决定使用方式。

    3.1、基于NodeJS全栈式开发

    需要一种web服务帮我们实现以前后端做的事情

    这张图看起来简单而且很好理解,但没尝试过,会有很多疑问。

    • SPA模式中,后端已供了所需的数据接口,view前端已经可以控制,为什么要多加NodeJS这一层?
    • 多加一层,性能怎么样
    • 多加一层,前端的工作量是不是增加了?
    • 多加一层就多一层风险,怎么破?
    • NodeJS什么都能做,为什么还要JAVA

    3.2、为什么要增加一层NodeJS?

    现阶段我们主要以后端MVC的模式进行开发,这种模式严重阻碍了前端开发效率,也让后端不能专注于业务开发。
    解决方案是让前端能控制Controller层,但是如果在现有技术体系下很难做到,因为不可能让所有前端都学java,安装后端的开发环境,写VM。
    NodeJS就能很好的解决这个问题,我们无需学习一门新的语言,就能做到以前开发帮我们做的事情,一切都显得那么自然。

    3.3、性能问题

    分层就涉及每层之间的通讯,肯定会有一定的性能损耗。但是合理的分层能让职责清晰、也方便协作,会大大提高开发效率。分层带来的损失,一定能在其他方面的收益弥补回来。
    另外,一旦决定分层,我们可以通过优化通讯方式、通讯协议,尽可能把损耗降到最低。

    四、基于Node的前后端分离

    淘宝基于NodeJS的前后端分离

    上图是对基于Node的前后端分离分层的理解,以及Node的职责范围。简单解释下:

    • 最上端是服务端,就是我们常说的后端。后端对于我们来说,就是一个接口的集合,服务端提供各种各样的接口供我们使用。因为有Node层,也不用局限是什么形式的服务。对于后端开发来说,他们只用关心业务代码的接口实现。
    • 服务端下面是Node应用。
    • Node应用中有一层Model Proxy与服务端进行通讯。这一层主要目前是抹平我们对不同接口的调用方式,封装一些view层需要的Model。
    • Node层还能轻松实现原来vmcommon,tms等需要
    • Node层要使用什么框架由开发者自己决定。不过推荐使用express+xTemplate的组合,xTemplate能做到前后端公用。
    • 怎么用Node大家自己决定,但是令人兴奋的是,我们终于可以使用Node轻松实现我们想要的输出方式:JSON/JSONP/RESTful/HTML/BigPipe/Comet/Socket/同步、异步,想怎么整就怎么整,完全根据你的场景决定。
    • 浏览器层在我们这个架构中没有变化,也不希望因为引入Node改变你以前在浏览器中开发的认知。
    • 引入Node,只是把本该就前端控制的部分交由前端掌控。
  • 相关阅读:
    C# 异步锁
    C#异步编程基础入门总结
    C#异步编程基础入门总结
    C#与数据结构--图的遍历
    C#中IEumerable的简单了解
    C# prism 框架 MVVM框架 Prism系列之事件聚合器
    .NET Core 3 WPF MVVM框架 Prism系列之对话框服务
    C# prism 框架
    TaskAwaiter<TResult> 结构
    利用Eventlog Analyzer分析日志
  • 原文地址:https://www.cnblogs.com/cloudml/p/4665458.html
Copyright © 2011-2022 走看看