《探讨——关于三层架构前在前端项目的应用》第一版

2024-09-01 13:44

本文主要是介绍《探讨——关于三层架构前在前端项目的应用》第一版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《探讨——关于三层架构在前端项目的应用》第一版

前言

本文的阅读需要具备一定的技术知识基础,特别是关于 MVVM 框架(如 Vue)的理解。若您对这些知识尚不熟悉,建议您先行进行相关知识的学习与探索。

本文名词说明:

接口:指一个模块对外暴露的方法,用于与自身通讯。例如类的方法。

HttpApi: 特指前后端交互的 HTTP 请求。

背景

在开发比较复杂的 Vue 项目的时候,我们常常会遇到这样一个问题:Vue 组件的代码容易变得异常庞大且复杂,这不仅降低了代码的可读性,也极大地影响了项目的可维护性。

常用优化方法与不足

针对这个问题,常用的优化方法有:

  • 通用方法抽离到utils/目录:将项目中频繁使用的通用函数或方法集中抽离到utils/目录下,通过模块化的方式管理,既减少了代码的冗余,也便于复用和维护。
  • <script><style>抽离成独立的文件:将 Vue 组件中的<script>逻辑代码和<style>样式代码分别抽离到独立的文件中,提高了代码的组织性。
  • 业务组件和公用组件抽离:根据组件的功能和用途,明确区分业务组件和公用组件,将公用组件抽离出来进行统一管理;将复杂的业务组件从页面代码中分离。有助于减少代码的重复,提高组件的复用率,同时也使得项目结构更加清晰。
  • 利用 Mixins 进行功能抽离:借助 Mixins 将组件的公共逻辑或选项抽离出来,以便多个组件中共享,从而避免在多个组件中重复编写相同的代码,简化组件结构,提高代码的可维护性。

综合运用上述优化方法,可以极大地改善 Vue 组件代码的可读性和可维护性。

然而,上述优化方法并不能很好的对业务逻辑错综复杂的组件进行优化,其<script>代码依然显得相当繁复。这主要是因为<script>内部承载了过多职责,包括但不限于调用外部接口处理接口响应数据的转换整理传递给接口的参数,以及实现复杂的业务逻辑等,从而导致了代码的冗余与难以理解。

如何更好的整理组织这部分代码呢?记得之前看过一遍文章,文中提到前端项目应借鉴后端开发中广泛采用的 B/C(业务逻辑层/控制层)架构设计模式,以实现代码的“高内聚、低耦合”目标。 这个想法启发了我。在对MVC三层架构等 B/C 架构深入了解后,发现三层架构的项目组织模式可以很好的解决<script>臃肿问题。它不仅能够帮助我们清晰地划分代码职责,还能有效提升代码的可读性与可维护性。

下面我将从“三层架构的定义”、“MVVM 架构的定义”、“前端 MVVM 架构的说明以及存在的问题”、“三层架构在前端项目上的应用”、“优缺点”四个方面分享我的思路。

什么是三层架构(3-tier architecture)

三层架构是一种极其实用且广泛应用的软件设计方法。通过将功能代码进行分层,以便更好地组织代码,从而提高代码的可维护性和可扩展性。

详细定义如下:

三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。

——《百度百科——三层架构》

三层架构最核心的思想是根据业务流程不同阶段将代码进行拆分整合。一般来说,一个业务模块的大体流程如下:

从数据库获取业务所需数据
根据业务对数据进行处理
呈现给用户
获取用户交互数据
根据业务需求对数据进行处理
将数据存储到数据库

从上图可以看到,业务流程主要划分为三个阶段:数据在数据库中的读取与存储操作、业务处理、用户交互。因此,三层架构将一个业务的实现代码划分为数据访问、业务逻辑、表示三个维度的模块,各个模块间通过接口进行通信。将所有业务进行划分并水平整合后,就形成了表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。

各个层级的职责简述:

  • 表示层:负责应用程序的用户界面和交互。
  • 业务逻辑层:处理应用程序的核心业务规则和数据验证。
  • 数据访问层:管理对底层数据源的访问和操作。

三层架构优点:

  1. 高内聚、低耦合,可以降低层与层之间的依赖。
  2. 容易移植、维护,如 B/S 转 C/S、SQL Server 转 Oracle、添加、修改、删除等。
  3. 有利于标准化。
  4. 有利于各层逻辑的复用。
  5. 安全性高。用户端只能通过业务逻辑层来调用数据访问层,减少了入口点,把很多危险的系统功能都屏蔽了。

前端 MVVM 架构的说明以及存在的问题

现代前端项目的构建广泛依赖于采用 MVVM(Model-View-ViewModel)架构模式的框架。与三层架构一样,MVVM 同样是一种高效的软件设计架构模式,在前端开发领域占据着举足轻重的地位。那么,既然已经采用了 MVVM 架构,那为什么还需要三层架构呢?在回答这个问题前,我们需要先了解 MVVM 架构在前端中充当什么角色?发挥什么作用?

注:本文提及的前端项目特指前后端分离开发模式下的前端项目

什么是 MVVM?

MVVM (Model-View-ViewModel) 是一种软件架构设计模式,它旨在将 View(用户界面)与 Model(业务逻辑和数据处理)分离,同时引入 ViewModel 作为它们之间的媒介串联起来。MVVM 架构特别适用于构建复杂的用户界面,特别是在数据绑定机制的支持下,能够显著提升开发效率与用户体验。

和三层架构一样,MVVM 也将功能代码进行分层。其中的 :

  • Mode 层:负责数据库数据的存储检索以及业务逻辑;
  • View 层:负责 UI 界面的实现,展示数据给用户并接收用户的输入;
  • ViewModel 层:是 Model 和 View 之间的桥梁,实现数据的双向流通、自动响应,负责将 Model 层的数据转换为 View 层可以展示的信息,同时也将 View 层的用户操作转换为 Model 层可以处理的数据变更。

最初的 MVVM 架构涵盖了整个开发流程(包括前端与后端)。随着前后端分离的兴起,以及 MVVM 架构在解决前端开发“痛点”方面的优秀表现,因此被广泛应用于前端项目中。

交互\反馈
数据绑定
接口请求
响应数据
Model
Database
业务逻辑
用户
View
ViewModel
MVVM 在前端上的应用

在前端开发早期阶段,实现 JavaScript 中数据与页面展示内容之间的实时响应,不得不依赖于繁琐的手动编码,通过 JavaScript 直接操作 DOM 元素来完成。这一过程在处理简单交互倒还行,但一旦涉及构建复杂的表单页面,其代码量与复杂度飞速激增,严重制约了开发效率与可维护性。

好在,随着 MVVM(Model-View-ViewModel)架构的设计理念的出现和普及,人们发现得 MVVM 这个思路特别好。其核心思想——ViewModel 作为桥梁,实现数据与视图之间的双向绑定与自动响应,恰好能够解决前端开发中的这一“痛点”。基于这一思路,诸如 Vue.js、React、Angular 等现代前端框架应运而生,它们极大地简化了数据绑定与界面更新的流程,进一步提升了前端开发的效率与项目的可扩展性。

在前端的 MVVM 架构中,Model、View、ViewModel 三者的含义则发生了变化。 以 Vue.js 为例:

这篇关于《探讨——关于三层架构前在前端项目的应用》第一版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127099

相关文章

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

html 滚动条滚动过快会留下边框线的解决方案

《html滚动条滚动过快会留下边框线的解决方案》:本文主要介绍了html滚动条滚动过快会留下边框线的解决方案,解决方法很简单,详细内容请阅读本文,希望能对你有所帮助... 滚动条滚动过快时,会留下边框线但其实大部分时候是这样的,没有多出边框线的滚动条滚动过快时留下边框线的问题通常与滚动条样式和滚动行

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

springboot项目中使用JOSN解析库的方法

《springboot项目中使用JOSN解析库的方法》JSON,全程是JavaScriptObjectNotation,是一种轻量级的数据交换格式,本文给大家介绍springboot项目中使用JOSN... 目录一、jsON解析简介二、Spring Boot项目中使用JSON解析1、pom.XML文件引入依

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹