前后端分离之Web前端架构设计

前后端分离技术——前端框架 本文主要介绍前后端分离技术——前端框架。 阅读详情

转自:http://www.cnblogs.com/sharpxiajun/p/3870797.html


在前面的文章里我谈到了前后端分离的一些看法,这个看法是从宏观的角度来思考的,没有具体的落地实现,今天我将延续上篇文章的主题,从纯前端的架构设计角度谈谈前后端分离的一种具体实现方案,该方案和我原来设想有了很大的变化,但是核心思想没变,就是控制层是属于Web前端的。

  在以前文章里我说道前后端分离的核心在于把mvc的控制层归为前端的一部分,原方案的构想在实际的生产开发里很难做到,我觉得核心还是控制层和视图层的技术异构性,这样后果使得系统改造牵涉面太大,导致在项目团队里,沟通、协调以及管理成本相对较高,随着前端技术的发展,前端开发的工程量是越来越大,难度也是越来越高,因此前端工程的项目化,工程化和独立性越来越被人重视了,所以出现了大量的javascript MVC的富应用。如果javascript也能做到MVC模式,那么前端框架就可以抛弃异构语言的控制层,做到真正的独立。

  要把传统的MVC的C层从前端剥离掉,我们首先要理解下MVC的C层即控制层到底做了什么样的事情,控制层的作用是模型层和视图层沟通的纽带,模型层进一步具体点就是数据层,视图层具体点就是数据展示给用户的方式,下面我们看看java的Web应用里,控制层和视图层是如何耦合的呢?做过java的web开发的人第一个反应就是页面里回嵌入大量java代码或者使用jsp的标签或者使用velocity,freemark这样的模板语言,这些东西大家很自然的把它们归为服务端的东西,但是它们却出现在了视图层,所以视图层和控制层没法解耦,其实除了这个还有一个大家很熟悉但又很少把它归为是视图层和控制层的耦合因素,这个因素就是页面的跳转,用ajax的角度描述这个因素就是页面的同步提交,这两个因素也就是构成了控制层的核心应用(是应用数据和页面展示的桥梁)。

  要将前端独立起来,控制层归为前端是不可改变的定律,如果服务端的人太傲慢无礼,不肯放掉控制层,那么前端就必须自己来做控制层,那么前端做控制层的难点就是解决前端技术如何做到解决服务端数据展示和有时无法避免的同步提交问题,解决服务端数据展示问题就是要在javascript语言里找到替换java代码、jsp标签以及velcity这样的模板语言的技术,很幸运在javascript的确拥有这样的技术,这就是微软公司贡献的jQuery的模板语言jquery-tmpl,它的访问地址是:

  https://github.com/BorisMoore/jquery-tmpl

  百度搜索的地址:

 

  http://www.baidu.com/s?wd=jquery%20tmpl&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&rsv_sug3=8&rsv_sug4=1397&rsv_sug1=8&oq=jquery%20tm&rsv_sug2=0&f=3&rsp=0&inputT=13948

  有了javascript的模板技术,我们就可以不用在页面再写入服务端的任何东西,这样就达到异构语言的控制层和前端的分离,从而摒弃服务端的控制层。而模板语言需要的数据就可以通过ajax请求发送到页面,ajax接收到数据后传输到javascript的模板语言里最终就可以达到服务端数据在页面上的展示,使用这种方式展示数据好处不仅仅局限于控制层和视图层的解耦,同时还会提升页面的响应效率,因为通过这种方式,数据和服务端的交换不再需要视图展示要素即服务端直接发送个页面,或者是页面的片段,然后操作dom使得这些视图性的东西展示到页面上的行为,而现在服务端只需要传输需要传输的数据就行,这样一个http请求的数据传输量会大大减少,减少http请求的数据大小是提升网站加载效率的重要指标之一,同时如果传输只需要最必要的数据,那么服务端和前端的交互就可以做到统一的报文格式,使用统一的报文规范,这样会对项目管理,系统运维和维护带来质的飞越。

  让控制层彻底归为web前端的第二步就是要让web应用的同步提交操作彻底死翘翘,而传统的同步提交只要承担整个web应用的入口的功能即可。谈到这里我想如果对web前端开发有过经验的人看到上面这句话就很容易联想到现在很火的单页面开发,没错我的确在讲单页面开发,其实javascript MVC的最高境界就是单页面模式。

  虽然时下的web应用是ajax的天下,但是如果我们想彻底的抛弃同步提交请求的想法真的应用到实践中,开发人员会发现它常常会变成一个吃力不讨好的事情,为什么说它是一件吃力不讨好的事情,我想主要体现在两个方面:

  第一方面:ajax请求往往是作为纯数据的传输,那么页面效果的显示就需要开发人员自己操作DOM,使用各种javascript开发技巧,这就大大增加页面开发难度和复杂度,对于一个要投入市场的web应用,其成本和风险是可想而知的。

  另一方面:同步提交页面会让用户享受一种很顶级的用户体验,这就是浏览器的前进和后退体验,如果让ajax做前进和后退,特别是用户和网站交互量很大的网站,这个操作可能会成为一件不可能完成的任务。

  这里我首先讲如何解决前进和后退的问题,在浏览器的请求url地址有一个很重要的特性就是hash属性,例如我们写页面时候常常会写到这样的语句:

1
< a  href=”#” onclick=”ftn()” id=”btn”>btn</ a >

 

  当用户点击这个链接时候,会促发click事件,可能很多人没有留心到此时网页请求的url后面会添加一个#号,例如:www.cnblogs.com/#,如果我们把这个链接改下,如下:

1
< a  href=”#sharpxiajun” onclick=”ftn()” id=”btn”>btn</ a >

 

  再点击这个链接,我们会发现链接变成了www.cnblogs.com/#sharpxiajun,前面的#sharpxiajun就是url的hash,url的hash是不会发送给服务端的,不过在浏览器里有专门的事件可以监听到它,这个事件就是hashchange事件,它是一个window的事件,浏览器的前进与后退支持url的hash改变,同时window可以监听到该事件,因此我们可以通过改变url的hash再加上ajax请求就可以模拟页面的同步提交了,同时该请求是可以使用浏览器的前进和后退操作。

  使用url的hash属性模拟同步的url,那么我们就可以将页面的url改成一个带hash的url地址,例如传统网站的注册页面地址应该是:www.cnblogs.com/register.html,现在可以改为www.cnblogs.com/#!/register,如果注册页面的上游页面是www.cnblogs.com/,那么我们在注册页面点击回退按钮时候页面就会跳转到www.cnblogs.com/。

  如果我们web前端拥有的以上我所讲述的技术,那么一个web应用的控制层可以完全平移到了web前端,而web前端可以做到真正的项目独立,到时web前端只要和服务端建立合适的报文规范,使用时下流行的json数据格式,就可以完成Web应用的开发,这样的web应用就做到前后端的真正分离。

  使用我讲到的技术开发网站,浏览器的通信都将是ajax,这个ajax按应用场景可以分为两种类型:一种类型是模拟同步提交的ajax,这个请求时获取视图,也就是页面,这个功能可以当做一个路由功能,这是控制层控制视图层的操作,另一个ajax就是获取数据,ajax获取到数据后,通过javascript模板技术进行转化,最后控制层将转化的数据和视图层结合到一起,最终将完整的页面呈现给网站的用户。

  Javascript做控制层其实是通过url的hash完成的,核心是使用window的hashchange事件,这里就有一个web前端开发最头疼的问题,是不是所有浏览器都支持hashchange事件了?答案是:新浏览器都支持,最可恶的ie,在8以上包括8都支持,那么我们想让所有浏览器都可以使用hashchange怎么办来了?jquery有个插件可以让低版本的浏览器支持hashchange事件,有兴趣的人可以百度一下,不过如果是在移动设备上开发web应用时完全不用担心兼容问题。

  前面我用到一个带hash的url:www.cnblogs.com/#!/register,#!/xxx是我推荐给大伙的书写形式,理由是:我们做一个网站都需要给搜索引擎示好,但是搜索引擎的网络爬虫都是抓取静态页面,对于ajax请求的静态页面往往无能为力,因此我们要让搜索引擎的网络爬虫能找到我们的页面所以在#后面加上!/,很多高级的搜索引擎会抓取到我们网页上的内容,这里主要是指google,百度的是不是有类似的能力,俺就不清楚,这个就得问问度娘了。

  我之前在我的博客里给大伙分享了我自己写的一个javascript框架,当时我使用一个文件,一个库来完成我的框架,这样的框架其实只能算是把一个Web开发里能通用的东西做了一个抽取和汇总,换种说法就是以前的框架是一个工具类大集合,但是到了我今天讲的web前端的javascript框架,这样的工具类是不能满足我们的需求,原因是控制层被移到了web前端,这样web应用的数据模型及模型层和控制层对视图层的路由功能同时也迁移到了web前端,那么某一个页面对应的数据模型以及对应的视图页面,我们应该让它和别的数据模型和对应页面有一个明显的界线,具体实现里就是一个视图及一个页面对应的javascript代码应该要模块化,所以我们最好一个页面对应一个javascript文件,这样我们就要对javascript代码进行模块化管理,要引入requieJS或者国产的seajs工具,具体的使用有兴趣的童鞋可以百度或者google一下。

  如果我们不会用requieJS和seajs怎么办了?大型网站的javascript代码和css代码在生产上都会尽量的合并成少量的文件,因此我这里建议大家要用面向对象的方式组织自己的javascript代码,这里我推荐一个借鉴与jQuery架构类似的javascript框架模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
( function ($,params){
     function  MyObj = {
         return  this ._init.apply( this ,arguments);
}
myObj.fn = myobj.prototype;
myObj.fn =  function (){
     return  {
        _init: function (){ // 初始化方法
             this .setting = arguments;
return  this ;
},
_bindEvt: function (){ // 事件绑定
代码…
     return  this ;
},
_pageLoad: function (){
_bindEvt();
    代码…
     return  this ;
}
}
};
// 给类添加属性或方法,相当于静态变量
myObj.extend =  function (obj){
     var  extended = obj. extended;
     for  ( var  i  in  obj){
        myObj.fn[i] = obj[i];
}
if  (extended) extend(myObj);
};
myObj.load =  function (param){
     return  new  myObj(params)._pageLoad();
}
return  myObj;
})(jQuery,params,undefined)

 

  该框架的load方法相当于java的main函数,这里我们使用javascript对象的技术构建对象,那么该对象对外就很容易扩展,每个原型prototype方法都会返回this指针这样就可以达到jQuery里方法连缀的写法。

  其实这样的结构最后也能应用到requieJS和seajs里面,这样写的javascript代码的结构性和层次性更好,扩展性更强。

基于Java+Vue前后端分离的“魅力繁峙”宣传网站设计与实现 本文详细介绍了基于Spring Boot + Vue.js的前后端分离架构设计与实现"魅力繁峙"宣传网站的全过程。文章从需求分析、技术选型、架构设计入手,逐步深入到前后端的具体实现细节,包括数据库设计、RESTful API开发、Vue组件化开发、权限管理、性能优化等方面,并提供了完整的代码示例和实现思路。通过本文,读者可以全面了解现代化Web应用开发的全流程和技术实践。关键词Vue.js;前后端分离;宣传网站;本文详细介绍了基于Java+Vue前后端分离架构的"魅力繁峙"宣传网站的设计与实现。 阅读详情

相关推荐

Python Django 前端框架整合

本文旨在为开发者提供一套完整的Django与前端框架整合方案,涵盖从基础配置到高级优化的全过程。Django与React/Vue的整合策略RESTful API设计与实现前后端通信机制开发环境配置与部署方案文章将从基础概念开始,逐步深入到具体实现,最后讨论高级主题和最佳实践。每个部分都包含详细的代码示例和架构图。Django: Python编写的开源Web框架,遵循MVT模式React: Facebook开发的JavaScript前端框架Vue.js。

AI Python 编程之道的博客 842

架构设计:前后端分离之Web前端架构设计

  在前面的文章里我谈到了前后端分离的一些看法,这个看法是从宏观的角度来思考的,没有具体的落地实现,今天我将延续上篇文章的主题,从纯前端的架构设计角度谈谈前后端分离的一种具体实现方案,该方案和我原来设想有了很大的变化,但是核心思想没变,就是控制层是属于Web前端的。   在以前文章里我说道前后端分离的核心在于把mvc的控制层归为前端的一部分,原方案的构想在实际的生产开发里很难做到,我觉得核心还是...

weixin_34408717的博客 593

ansys workbench 静力结构分析 高阶教程

ansys workbench 静力结构分析 高阶教程 目录ansys workbench 静力结构分析 高阶教程新建工程模型导入设置材料模型简化: 主要内容: 材料设置、模型简化、网格细化、约束分析、接触设置、求解设置、报错处理、结果分析 基础教程: ansys workbench 静力结构分析 基础操作流程(入门) ansys版本: 19.0(16.0及以上均可) 参考资料: 推荐教学视频《有限元分析 张晔》(超详细 ???? )、ansys workbench 超级学习手册(查阅用) 说明:一些基

weixin_43434624的博客 5万+

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--后端实现

1. 完成后台代码从dao -> serivce -> controller , 并对每层代码进行测试, 到controller 这一层,使用Postman 发送http post 请求完成测试。使用Postman 测试时,因为我们前台是发送的json 数据,被服务器接收到后,转成javabean 数据,因此pom.xml 需要引入jackson,处理json 数据,2. 如果需要将提交的json 数据, 封装到对应的Javabean, 需要配置@RequestBody , 否则会报错500。

业精于勤,荒于嬉 2846

Canoe主要功能的详细介绍

CANoe是德国Vetor公司推出的一款用于总线开发的设备,全程为CAN open environment。后来随着总线技术的发展,CANoe不仅限于CAN类型的总线开发,还包含LIN、FlexRay、MOST和以太网等开发。在车载网络和ECU开发、测试和分析方面,CANoe几乎长期占据着垄断地位,当然是因为其强大的功能性了。目前用这个工具的主要是整车厂和供应商的网络设计工程是、开发工程师和测试工程师。小编当时安装CANoe的时候也是花了一定的时间和精力,好在没有崩溃。

车载测试 3721

(一)利用Python实现数据集读取,Python基本文件操作介绍

机器学习是计算机对大量数据的分析过程,在机器学习的实际项目中,通常都需要准备数据集,数据集通常包含的数据数量是庞大的。例如,在处理计算机视觉领域的项目时,每一张图片都是一个单独的文件,为了提高模型训练的效果,图片数量通常会比较多,因此需要合理且高效的操作将所有的图片数据读取。本篇旨在介绍如何用Python对海量文件进行遍历,也是机器学习实践的第一步。.........

ZZR2631574030的博客 6355

前后端分离架构概述

1、背景 &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; 前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。这

Hopefully Sky的博客 24万+

远程声控系统(MATLAB代码见优快云资源)

远程声控系统技术报告 一、题目要求 实现一个远程声音控制系统。首先采集不同的语音指示信号,进行适当压缩;然后通过噪声信道实现远程传输,远端接收后再通过适当计算识别出是何指示,最后送入一个处于未知状态、但能控/能观的控制系统,完成不同的控制动作。 二、问题分解与解决思路 2.1 系统设计 实验中以汉语数字语音1~9作为指令,数字语音“1”代表一号指令,数字语音“2”代表二号指令,依次类推。发送端发出语音“1”,发送端对应的数字语音文件为“1b.wav”,通过信源编码对语音进行压缩编码,然后进行信道编码并进行基

业精于勤,荒于嬉 5733

前后端分离开发架构

前后端分离

qq_54525448的博客 4889

网工、运维利器:MobaXterm,一款全能的远程工具

你好,这里是网络技术联盟站,我是瑞哥。是一款由Mobatek开发的多功能远程计算机管理工具,集成了多种网络协议和工具,专为网络工程师和系统管理员设计。它提供了丰富的远程连接功能,包括SSH、RDP、VNC、X11转发等,支持文件传输和多标签界面,内置了文本编辑器和多种网络工具,是一款全能的远程管理软件。MobaXterm的开发起始于2008年,最初只是一个简单的X服务器,但随着用户需求的不断增加和软件的逐步完善,MobaXterm逐渐发展成了一款功能全面、界面友好的远程管理工具。

网络技术联盟站 5227

什么是 SAP Fiori 的 Technical Catalog

笔者之前的文章曾经提到一个叫做本文介绍 Technical Catalog 这个概念在 SAP Fiori 技术体系中的作用。首先我们如何在系统里查看这个 Catalog SAP_BASIS_TCR_T 里面包含的内容呢?如果大家照着本文开头那篇文章里提到的步骤,那么在自己系统里会创建好名叫的 PFCG role.我们登录 ABAP 系统,启动事务码 PFCG,打开这个 role, 就能看到它。展开之后,发现它扮演着一个容器的角色,里面包含了很多 ABAP 对象。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 742

前后端分离架构设计与实现:构建现代Web应用的基石

前后端分离指的是前端(客户端)与后端(服务器端)在代码库、部署环境和技术栈上的独立性。在这种架构下,前端专注于用户界面的展示和交互逻辑,而后端则负责处理业务逻辑、数据存储及API服务提供。

m0_56896669的博客 1208

随机森林遥感反演详细教程

通过这篇文章,我们展示了如何使用Python对筛选后的影响因子进行随机森林建模,并应用于遥感数据反演森林生物量的任务。该流程不仅可以提高预测精度,还能有效处理大规模的遥感数据,为生态监测和森林管理提供重要支持。

热爱分享,热爱记录 2951

KrillinAI Web版前后端分离架构深度解析

在AI视频翻译和配音工具快速发展的今天,KrillinAI作为一款专业级的多语言视频处理工具,其Web版本采用了现代化的前后端分离架构。这种架构设计不仅提升了开发效率,更确保了系统的可扩展性和维护性。本文将深入解析KrillinAI的前后端分离架构设计理念、技术实现细节以及最佳实践。 ## 架构概览 KrillinAI采用经典的前后端分离架构模式,整体架构如下图所示: ```mermaid ...

gitblog_00370的博客 1093

Could not create cache adapter cache factory not found: factory for cache adapter ““ was not regist

RROR: Could not create cache adapter error=cache factory not found: factory for cache adapter "" was not registered ERROR: Job failed (system failure): Error response from daemon: OCI runtime create failed: container_linux.go:349: starting co...

知无涯 4032

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SpringBoot+Vue前后端分离项目实战

在现代Web开发领域,前后端分离已成为主流架构模式。它通过将前端和后端开发解耦,提升了开发效率和系统可维护性。本文将详细介绍如何使用SpringBoot和Vue构建一个前后端分离的项目,涵盖项目搭建、前后端交互、权限控制等核心内容。一、项目架构设计本项目采用前后端分离架构,前端使用Vue框架,后端使用SpringBoot框架。前端负责页面展示和用户交互,后端负责数据处理和业务逻辑。前后端通过RESTful API进行通信,使用JSON格式交换数据。二、后端开发:SpringBoot1. 项目初始化。

2501_90410679的博客 46

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Web商城系统开发Spring Boot + Vue】之关键代码解读

本文介绍了一个基于前后端分离架构的Web商城系统开发案例。系统前端采用Vue 3 + Element Plus,后端使用Spring Boot 3 + MyBatis,技术栈包括Java 21、MySQL 8.0和Vite构建工具。文章详细解析了系统三层架构(前端层、后端层、数据库层)的交互流程,通过"用户下单→后台处理→返回结果"的完整链路示例,展示了从用户操作到数据库更新的全流程实现。此外还提供了前端Vue 3的关键代码结构说明,帮助开发者掌握电商系统的核心技术实现。

LeeeX! 的博客 2572

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: Web应用架构的新趋势---前端和后端分离的一点想法
下一篇: 大型网站架构之分布式消息队列
andybbc
博客等级 码龄11年 64粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值