最近研究servlet,看书时候书里讲到了c/s架构到b/s架构的演变,讲servlet的书都很老了,现在的b/s架构已经不是几年前的b/s架构,其实b/s架构就是web应用开发,对于这样的架构我们现在应该考虑的是前端和后端的分离(注意:这里的后端是指服务端)。
Web前端现在是一个独立的技术工种,这个工种的产生主要是针对互联网行业的需求,我在以前的文章里曾经讲到过,一个大型互联网网站,例如想淘宝网,它绝对不是一个Web项目,而是一群web项目的集合,那么如果不在前端进行整合,这么多web项目前端开发一定存在大量重复劳动,并且运维时候也存在难以统一管理的问题。本文假想一个面对需要前端资源整合的组织,如何做到前后端分离的解决思路。本文详情如下:
(一)前后端分离的目的和作用
做Web开发也可以说是B/S架构开发,B端和S端从技术体系角度而言异构性很大,换而言之就是B端使用的技术和S端使用的技术不适于同一个体系,这样的结果导致实际开发中,很难做到专业分工,如果项目开发过程中管控不到位,这样的问题可能会影响到整个项目的开发质量,因此前后端分离的目的之一就是要做到专业化分工,提高项目的质量和开发效率。
随着技术的发展,当下的Web开发形势已经和以前有了很大的不同,早期的Web项目是一个封闭的项目,用户从浏览器里看到的页面直到后台数据库都是在一个项目里集成的,而现在Web系统的规模越来越大,中大型的Web系统是一个开放式的系统,开放型的系统用户在浏览器发起的请求可能会转发到外部的系统里进行处理,或者是本地的系统和外部系统一起完成请求的处理,此外有的请求可能不会直接请求数据库,而是请求缓存服务器,这些变化几乎都是发生在Web系统的服务端,前后端耦合度很高的Web系统服务端的复杂度提升必然带来了Web前端的复杂度的提升。因此Web前端从系统架构的角度也需要更加专业的管控,管控的作用之一就是前后端进行分离,降低前端对服务端的依耐性。
富客户端应用的普及导致Web前端技术开发更加专业化,Web前端工程师成为一个独立的技术岗位,Web前端开发技术的难度也越来越高,前后端的分离就是为Web前端开发营造一个良好的开发环境,不要让前端工程师被一些不可控的外在因素所影响(例如:前后端的耦合性),最后导致前端不能专心致志做出更加好的作品。所以,前后端分离是让前后端更加专业化,在技术和管理上将前端角色更加明确,更深入的挖掘前端开发的价值。
(二)现有系统架构给前后端带来的问题以及解决方法

上图是目前大部分系统的架构图,虽然有些系统采用分布式架构,层与层之间使用了远程调用框架,但是本质上都逃不开上面这个架构设计。这张图是一张比较合理的图,在实际开发里最常发生的事情就是控制层(Control)越过服务层(Service)直接处理下面的资源。
前后端耦合的问题主要发生在控制层(Control),控制层是前端和服务端交互的边界,但是在开发过程中控制层(Control)和服务层(Service)常常混淆不清,这就是前后端耦合度高的重要原因。
因此要前后端解耦,就是要划清控制层的边界,控制层到底该属于前端还是服务端,在MVC模式里控制层作用是调度,控制层不是写业务逻辑的地方,因此将大量业务逻辑写到控制层其实是违背了MVC模式的思想,同时控制层是前端和服务端通讯的桥梁,其实控制层是参入了前端的工作任务,既然控制层要剥离业务操作同时控制层也要参入前端应用的开发,那么将控制层归为前端的一部分是完全合情合理合规的。
把控制层剥离了业务逻辑处理可能会让人不知道如何开发了,我觉得有这种想法的人是开发时候没有理解透MVC模式思想,编程随意性大养成了坏习惯,这个就需要这些人一点点去适应技术新趋势的发展。
前后端分离的终极目标应该是前端和服务端是完全独立的项目,前端项目包含上图里的浏览器和控制层,服务端项目包括服务层、DAO层等等,前端项目和服务端项目以高效的远程调用框架做通讯介质,项目开发时候前端项目做前端的事情,服务项目做服务端的事情,这样就让服务端开发的人员没有机会在控制层乱写代码了,保证了Web前端环境的纯粹性,最后生产发布也要独立部署,这样就达到了前后端真正解耦,但是前后端的沟通机制也是不可或缺的,我觉得它们之间的沟通使用高性能的远程调用框架,前后端相互约定通讯报文格式。.
其实不管服务端还是前端宏观流程无非是输入数据à数据处理à输出数据,但是服务端要把心思花在数据处理上,前端要更多关心的是输入输出数据时候的用户体验操作,服务端开发最大的问题就是违背MVC原则,代码编写的随意性,而前端不管出于安全还是性能考虑,最好是尽量少牵涉业务。前端和后端通讯层的独立,会将前后端进行真正的解耦,前面我讲到前后真正问题就是前端和后端技术路线不一致,但是传统Web开发里前后端又要融为一体,这就导致前后端很难做到专业化分工,对于前端应该尽量弱化通讯级别的开发工作,前端通讯编程只要知道调用哪个接口,传什么参数,怎么处理响应信息就行了。这样就能让前端和后端实现真正的专业化。
做到了这些,就不会发生开发时候前后端边界不清的问题了。
(三)前后端分离的一些想法
本文主题应该是前后端分离,我上面的建议是个彻底方案,要革以前系统的命,对存量系统那该如何处理,答案还是重构代码,想方设法逐步减少已经发现的前后端耦合度高的问题,这个跟我之前的建议就是小重构和大重构的区别,如果有人觉得我上面建议合适,前端组应该马上提供一套这样的框架出来,这样后面的新系统就不会在循环前面的错误了。我觉得搭建这样的框架不会太复杂的。
我上面的前后端分离的目的就是将前端资源整合为一个整体,理清前后端的边界,这些做完后,前端组里该如何提升自己的能力了?
这时候要让前端的东西项目化,工程化,前端技术不能再当做开发者的玩具,它也是需要大量的系统架构,开发规范,自动化压缩混淆,自动化发布,前端监控和分析,前端优化等等。
上面这些问题都很重要,也很专业,如果我有机会能参入这样的事情,我还有个特别的建议,具体如下:
在一个企业内部,Web前端的组件,不管这个组件是UI层级,还是javascript开发层级,都脱离不了该企业业务产品的模式,其实看看像网易,新浪这样的门户网站的前端应用组件,它们用于做门户很合适,但是用它来做企业应用软件可能就不是太好使用,因此对于组件要有一个清晰的认识,我觉得可以把组件按业务场景分类,这里我可以举个例子,如果这个企业有给门户使用的组件,而这个组件很适合门户,应该把它归为门户组件,如果某些组件适合做网站后台管理的,那么就列为后台管理组件,如果某些组件能跨多了业务场景则标记为通用组件。
做分类的原因是为了理清组件的应用边界,这样我们可以有针对性的积累和完善这些组件,有意识的开发相关的组件,最终形成一个针对某个业务组件的组件仓库,这样等新需求过来,Web前端的项目经理或Web前端的技术经理可以通过场景分析该需求需要使用那些现有的技术,需求里的那些场景是要进行开发,新场景里有没有新开发的代码能生成新的组件,这就可以做到有计划有次序的积累。
Web前端的核心人员应该花更多精力去设计、积累、整理各种组件,通过实际业务需求去完善和丰富这些组件,最终达到组件可以覆盖到全公司绝大多数场景,最终通过组件积累形成完善的Web前端开发规范,这样的规范覆盖面广更加易于操作,对于企业而言Web前端开发流程就可以做到标准化,从而达到简单培训一些技术能力不高的开发人员就能完成相关的开发任务,同时也让Web前端核心人员也能很好的把控项目的质量和进度。
以上就是我的一些前后端分离的想法,它是一个很宏观的想法,没有太多技术实现细节,如果这个想法如果针对存量系统,的确是一个颠覆性的方案,如果Web前端允许一切重头来做,我个人觉得这还是很好的一个思路。前后端分离是Web前端专业化的万里长征第一步,如果这一步做好,前端就有一套专属自己的优质环境,那时候Web前端就会有更大的余力做更优秀的工作,这就是我的愿景。
分享到:
相关推荐
本资源"单页web应用:javascript从前端到后端(源码)"提供了从浏览器端到后端全栈JavaScript开发的实践指导,对于学习和理解SPA的构建流程极其有价值。 1. **前端JavaScript框架**:前端是SPA的核心,通常会使用...
【标题】:“酒店管理系统练手项目-包含前端layui、后端...在实践中,你可以学习到如何整合这两种技术,构建一个完整的Web应用程序,同时理解MVC架构在实际项目中的运用,这对于提升你的IT技能和职业发展都将大有裨益。
其核心亮点在于采用独立的uni前端和Java后端架构,这样的设计有助于实现系统的高性能、安全性和可扩展性。 首先,让我们关注uni前端部分。Uni App是一款基于Vue.js开发的多端框架,它能够一次编写,多端运行,覆盖...
1. **MVC设计模式**:医院挂号系统后端很可能采用了Model-View-Controller(模型-视图-控制器)架构,将业务逻辑、数据和界面显示分离,提高代码的可维护性和复用性。 2. **Spring框架**:Java后端开发常用的框架,...
在当今快速发展的信息技术领域,前端和后端分离的架构模式已经成为一种主流的设计思路。它将传统的全栈开发模式分离为前端和后端两个独立的开发部分,前端主要负责用户界面的展示和与用户的交互,而后端则主要负责...
在本项目中,“手把手vue+springboot前后端分离项目实战---豆宝社区项目后端代码.zip”是一个针对初学者的实战教程,旨在通过构建一个名为“豆宝社区”的应用程序来教授Vue.js和Spring Boot的整合应用。这个压缩包...
【xuanyu CMS】是针对现代Web应用设计的一款高效、快速的后台开发框架,它采用了前后端分离的架构模式,旨在简化开发流程,提升开发效率。在这个框架中,前端部分利用了流行的Vue.js框架,并结合了Ant Design Vue库...
3. 前后端分离:在前后端分离的架构中,前端和后端通过API进行通信,前端负责展示和用户交互,后端专注于数据处理和业务逻辑。这种模式有利于团队协作,提高开发效率,同时降低了维护成本。 4. RESTful API:...
管理系统是企业信息化建设中的关键部分,它整合了前端用户界面和后端数据处理能力,以高效地管理工厂的日常运营。在这个系统中,前端和后端各司其职,共同构建了一个流畅的交互环境。 前端部分主要负责用户交互,...
综上所述,本项目集成了Node.js后端开发、MongoDB数据库管理、Web系统架构设计、Mui前端框架应用和iOS应用打包等多方面技术,实现了铁路后台管理系统的高效构建。这一方案充分体现了现代Web开发的技术趋势,对于学习...
在IT行业中,Web开发是关键领域之一,而MVC(Model-View-Controller)框架是构建Web应用程序的常用模式。ASP.NET MVC是一个强大的框架,它允许开发者以清晰、分离的方式处理应用程序的逻辑。在这个场景中,我们将...
【标题】中的“在线考试系统”是一个基于现代Web技术实现的教育信息化平台,它允许学生在互联网上进行考试,而“后端”则指的是系统背后的服务端开发,负责处理业务逻辑、数据存储以及与前端交互等功能。这个项目...
本文将详细解析一款名为"全开源app借贷系统源码 包含独立uni前端 java后端"的开源项目,该项目提供了一整套借贷系统的源代码,包括独立的前端和后端部分。下面我们将深入探讨其中涉及的技术栈、系统架构以及可能的...
项目涵盖了前后端分离的开发模式,体现了现代web开发的标准实践,同时,微信小程序的应用也展示了项目紧跟移动互联网发展的理念。通过这样的项目,学生可以全面地理解和掌握开发一个电商系统所需的各项技能和知识点...
微前端架构体系是一种将大型Web应用分解为多个独立、松耦合的微应用的架构模式。这种架构允许不同的团队独立开发、发布和升级各自的微应用,而不需要统一技术栈,从而提高开发效率并简化了大型应用的管理。微前端...
本毕业设计展示了一个完整的电子商务系统架构,该系统采用前后端分离的设计理念,以提高开发效率、提升用户体验、优化系统性能和维护便捷性。 在后端开发中,本系统选用了Springboot框架作为核心技术。Springboot是...
在现代Web开发中,前后端分离已经成为一种常见的架构模式,它允许前端和后端开发者专注于各自领域的技术,提高开发效率并提升应用性能。本项目基于"基于vue-admin和后端flask分离结合的超简单模板",展示了如何将Vue...
【标题】中的“基于Web的图片智能管理系统-后端”是指一个使用Web技术构建的,具备智能化管理功能的图片管理系统,其核心在于后端开发。这个系统可能涉及到图像处理、数据库管理、用户权限控制以及服务器端算法实现...
对于那些对提高Web应用响应速度和并发处理能力有追求的开发者来说,该项目不仅提供了一种可行的实现路径,也揭示了在前端与后端开发中应当如何做出技术选型和架构设计。 Lumen IM 是一个结合了 Element-ui、Vue.js ...