百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

前后端分离的演变史,了解一下(前后端分离的概念)

ccwgpt 2024-10-24 09:22 21 浏览 0 评论

后端为主的MVC时代

为了降低开发的复杂度,以后端为出发点,比如:Struts、SpringMVC 等框架的使用,就是后端的 MVC时代。 以SpringMVC流程为例,其运行流程如下图所示。

  • 用户发送请求到前端控制器DispatcherServlet
  • 前端控制器请求HandlerMapping查找Handler,可以根据xml配置、注解进行查找。
  • 处理器映射器HandlerMapping向前端控制器返回Handler
  • 前端控制器调用处理器适配器去执行Handler
  • 处理器适配器去执行Handler
  • Handler执行完成给适配器返回ModelAndView
  • 处理器适配器向前端控制器返回ModelAndViewModelAndView是SpringMVC框架的一个底层对象,包括Model和View。
  • 前端控制器请求视图解析器去对视图进行解析,根据逻辑视图名解析成真正的视图(JSP)。
  • 视图解析器向前端控制器返回View
  • 前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域。
  • 前端控制器向用户响应结果。

优点

MVC 是一个非常好的协作模式,能够有效降低代码的耦合度,从架构上能够让开发者明白代码应该写在哪里。为了让 View 更纯粹,还可以使用 Thymeleaf、Freemarker 等模板引擎,使模板里无法写入Java代码,让前后端分工更加清晰。

缺点

  • 前端开发重度依赖开发环境,开发效率低

这种架构下,前后端协作有两种模式:

1、第一种是前端写DEMO,写好后,让后端去套模板。好处是DEMO可以本地开发,很高效。不足是还需要后端套模板,有可能套错,套完后还需要前端确定,来回沟通调整的成本比较大。

2、另一种协作模式是前端负责浏览器端的所有开发和服务器端的View 层模板开发。好处是 UI 相关的代码都是前端去写就好,后端不用太关注,不足就是前端开发重度绑定后端环境,环境成为影响前端开发效率的重要因素。

  • 前后端职责纠缠不清

模板引擎功能强大,依旧可以通过拿到的上下文变量来实现各种业务逻辑。这样,只要前端弱势一点,往往就会被后端要求在模板层写出不少业务代码。还有一个很大的灰色地带是Controller ,页面路由等功能本应该是前端最关注的,但却是由后端来实现。 Controller 本身与 Model 往往也会纠缠不清,业务代码经常会出现在 Controller 层。

  • 对前端发挥的局限性

性能优化如果只在前端做空间非常有限,于是我们经常需要和后端合作。

注:在这期间(2005 年以前),包括早期的 JSP、PHP 可以称之为 Web 1.0 时代。

基于Ajax带来的SPA时代

2005年Ajax(Asynchronous JavaScript And XML,异步 JavaScript 和 XML,老技术新用法)被正式提出并开始使用 CDN 作为静态资源存储,于是出现了JavaScript 王者归来(在这之前JS 都是用来在网页上贴狗皮膏药广告的)的 SPA(Single Page Application)单页面应用时代。

Ajax的运行原理如下图所示。

优点

这种模式下,前后端的分工非常清晰,前后端的关键协作点是 Ajax接口。看起来是如此美妙,但回过头来看看的话,这与 JSP 时代区别不大。复杂度从服务端的JSP里移到了浏览器的 Javascript,浏览器端变得很复杂。类似 Spring MVC,这个时代开始出现浏览器端的分层架构,其架构如下图所示。

缺点

  • 前后端接口的约定

如果后端的接口一塌糊涂或者业务模型不够稳定,那么前端开发会很痛苦。不少团队也有类似尝试,通过接口规则、接口平台等方式来做。有了和后端一起沉淀的接口规则,还可以用来模拟数据,使得前后端可以在约定接口后实现高效并行开发

  • 前端开发的复杂度控制

SPA 应用大多以功能交互型为主,JavaScript 代码过十万行很正常。大量JS 代码的组织,与 View 层的绑定等,都比较复杂。

前端为主的MV*时代

这里的MV*模式主要指的是以下三种模式:

  • MVC(同步通信为主):Model、View、Controller
  • MVP(异步通信为主):Model、View、Presenter
  • MVVM(异步通信为主):Model、View、ViewModel

为了降低前端开发复杂度,涌现了大量的前端框架,比如: AngularJS 、 React 、 Vue.js 、 EmberJS 等,这些框架总的原则是先按类型分层,比如 Templates、Controllers、Models,然后再在层内做切分,如下图所示。

优点

  • 前后端职责很清晰

前端工作在浏览器端,后端工作在服务端。清晰的分工,可以让开发并行,测试数据的模拟不难。前端可以本地开发,后端则可以专注于业务逻辑的处理,输出 RESTful等接口。

  • 前端开发的复杂度可控

前端代码很重,但合理的分层,让前后端代码能各司其职。

  • 部署相对独立

可以快速改进产品体验。

缺点

  • 代码不能复用。比如后端依旧需要对数据做各种校验,校验逻辑无法复用浏览器端的代码。
  • 全异步,对 SEO 不利。往往还需要服务端做同步渲染的降级方案。
  • 性能并非最佳,特别是移动互联网环境下。
  • SPA 不能满足所有需求,依旧存在大量多页面应用。URL Design 需要后端配合,前端无法完全掌控。

Node.js带来的全栈时代

前端为主的 MV* 模式解决了很多很多问题,但如上所述,依旧存在不少不足之处。随着 Node.js 的兴起,Javascript 开始有能力运行在服务端,这意味着可以有一种新的研发模式,如下图所示。

在这种研发模式下,前后端的职责很清晰。对前端来说,两个 UI 层各司其职:

  • Front-end UI layer处理浏览器层的展现逻辑。通过 CSS 渲染样式,通过Javascript 添加交互功能,HTML 的生成也可以放在这层,依据应用场景而定。
  • Back-end UI layer处理路由、模板、数据获取、Cookie 等。通过路由,前端终于可以自主把控URL Design,这样无论是单页面应用还是多页面应用,前端都可以自由调控。后端也终于可以摆脱对展现的强关注,转而可以专心于业务逻辑层的开发。

通过 Node.js,Web Server 层也是 Javascript 代码,这意味着部分代码可前后复用,需要 SEO 的场景可以在服务端同步渲染,由于异步请求太多导致的性能问题也可以通过服务端来缓解。前一种模式的不足,通过这种模式也能完美解决。

与 JSP 模式相比,全栈模式是一种向原始开发模式的回归,不过是一种螺旋上升式的回归。

基于 NodeJS 的全栈模式,依旧面临很多挑战:

  • 需要前端对服务端编程有更进一步的认识。比如 TCP/IP 等网络知识的掌握。
  • NodeJS 层与 Java 层的高效通信。Node.js模式下,都在服务器端,RESTful HTTP 通信未必高效,通过 SOAP 等方式通信更高效。一切需要在验证中前行。
  • 对部署、运维层面的熟练了解,需要更多知识点和实操经验。
  • 大量历史遗留问题如何过渡?这可能是最大最大的阻力。

小结

综上所述,不管是模式还是技术,没有好坏优劣之分,只有适合不适合。前后分离的开发思想主要是基于 SoC (关注度分离原则),以上提到的种种模式,都是为了让前后端的职责更清晰,分工更合理高效。

相关推荐

MFC、Qt、WPF?该用哪个?(mfc和wpf区别)

MFC、Qt和WPF都是流行的框架和工具,用于开发图形用户界面(GUI)应用程序。选择哪个框架取决于你的具体需求和偏好。MFC(MicrosoftFoundationClass)是微软提供的框架,...

一款WPF开发的通讯调试神器(支持Modbus RTU、MQTT调试)

我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!项目介绍Wu.CommTool是一个基于C#、WPF、Prism、MaterialDesign...

关于面试资深C#、WPF开发工程师的面试流程和问题

一、开场(2-3分钟)1.欢迎应聘者,简单介绍公司和面试流程。2.询问应聘者是否对公司或岗位有初步的问题。二、项目经验与技术应用(10-20分钟)1.让应聘者详细介绍几个他参与过的C#、...

C# WPF MVVM模式Prism框架下事件发布与订阅

01—前言处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Prism提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事件进行...

WPF 机械类组件动画制作流程简述(wps上怎么画机械结构简图)

WPF机械类组件动画制作流程简述独立观察员2025年3月4日一、创建组件创建组件用户控件,将组件的各部分“零件”(图片)拼装在一起,形成组件的默认状态:二、给运动部分加上Rend...

C#上位机WinForm和WPF选哪个?工控老油条的"血泪史"

作为一个从互联网卷进工控坑的"跨界难民",在这会摸鱼的时间咱就扯一下上位机开发选框架这档子破事。当年我抱着WPF的酷炫动画一头扎进车间,结果被产线老师傅一句"你这花里胡哨的玩意...

【一文扫盲】WPF、Winform、Electron有什么区别?

近年来,随着软件开发的不断发展,开发人员面临着选择适合他们项目的各种框架和工具的挑战。在桌面应用程序开发领域,WPF、Winform和Electron是三个备受关注的技术。本文将介绍这三者的区别,帮助...

一个开源、免费、强大且美观的WPF控件库

我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!项目介绍HandyControl是一套基于WPF(WindowsPresentationF...

WPF 根据系统主题自动切换浅色与深色模式

WPF根据系统主题自动切换浅色与深色模式控件名:Resources作者:WPFDevelopersOrg-驚鏵原文链接[1]:https://github.com/WPFDevelopers...

WPF与WinForm的本质区别(wpf与maui)

在Windows应用程序开发中,WinForm和WPF是两种主要的技术框架。它们各自有不同的设计理念、渲染机制和开发模式。本文将详细探讨WPF与WinForm的本质区别,并通过示例进行说明。渲染机制W...

Win10/Win11效率神器再进化:微软发布PowerToys 0.90.0版本

IT之家4月1日消息,微软今天(4月1日)更新PowerToys,在最新发布的0.90.0版本中,修复多个BUG之外,引入多项功能更新,为Windows10、Windows...

一款非常漂亮的WPF管理系统(wpf架构及特性)

我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!WPFManager项目介绍该项目是一款WPF开发的管理系统,数据库采用的MSSqlserv...

WPF 实现描点导航(wpf按钮的点击事件)

WPF实现描点导航控件名:NavScrollPanel作者:WPFDevelopersOrg-驚鏵原文链接[1]:https://github.com/WPFDevelopersOrg/WPF...

微软更新基于Win11的Validation OS 2504:增强 .NET与WPF

IT之家5月1日消息,科技媒体NeoWin今天(5月1日)发布博文,报道称微软公司更新基于Windows11的ValidationOS,增强支持.NET和WPF,并优...

WPF的技术架构与优势(wpf的前景)

WindowsPresentationFoundation(WPF)是一个现代化的用户界面框架,专为构建Windows应用程序而设计。它通过分层的技术架构和丰富的功能集,提供了全面的应用程...

取消回复欢迎 发表评论: