设计模式
设计模式
到2025年1月12号,终于明白宋红康说的这句话的含义:框架 = 注解 + 反射 + 设计模式
MVC 和三层架构
三层架构是一种软件设计模式,但又不同于传统意义上的设计模式,我们可以将其称之为设计架构,而MVC是设计模式的一种
三层架构分为:
-
表示层(Presentation Layer)
-
业务逻辑层(Business Logic Layer, BLL)
-
数据访问层(Data Access Layer, DAL)
这种架构使用了多个设计模式,具体取决于实现方式,但常见的设计模式包括但不限于:
- MVC模式(Model-View-Controller):在表示层中常见的一种模式,用于分离用户界面逻辑(View)、业务逻辑(Model)和输入控制(Controller)。
- 工厂模式(Factory Pattern):用于创建对象而无需指定具体的类,常用于业务逻辑层中创建复杂对象。
- 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点,经常用于配置管理或连接池等资源。
- 仓库模式(Repository Pattern):用于抽象数据访问层,使得业务逻辑层可以独立于数据源的具体实现。
- 服务定位器模式(Service Locator Pattern):帮助查找和缓存服务对象,有助于减少依赖关系。
- 单元OfWork模式(Unit of Work Pattern):保持一系列要作为一个整体提交或回滚的操作,通常在数据访问层中使用。
后端
在一个spring框架的后端项目中,可以使用三层架构来实现设计模式
-
表示层:在前后的分离的项目中,在web API的设计中是Controller层,但也可以理解为这一层单独独立出一个前端工程
-
业务逻辑层:包含服务(Service)组件,负责业务逻辑
-
数据访问层:由仓库(Repository)或DAO(Data Access Object)组成,负责与数据库交互
在组合mybatis框架之后,后端的数据访问层由mybatis的mapper层接管
但以MVC设计模式来理解后端,则为:
-
Model(模型)
-
数据载体:模型代表应用程序的数据和业务逻辑。它不仅包括实体类(如POJOs),还可能包括DTO(数据传输对象)、VO(值对象)等。
-
服务层:虽然严格来说,服务层不是MVC的一部分,但它与模型紧密相关,因为它是处理业务逻辑的地方。服务组件通常会操作模型,并且可以被控制器调用来执行特定的业务功能。
-
-
View(视图)
-
视图解析器:在传统的Spring MVC应用中,视图通常是HTML页面、JSP文件、Thymeleaf模板等,用于展示给用户的数据。Spring使用视图解析器(ViewResolver)来确定哪个视图应该被渲染。
-
前后端分离:在现代的前后端分离架构中,视图的概念有所变化。前端不再由后端直接生成,而是通过API接口接收JSON或XML格式的数据,然后由前端框架(如Vue.js、React等)负责渲染。此时,“视图”更倾向于指向前端如何解释和显示这些数据。
-
-
Controller(控制器)
-
@Controller/@RestController注解:控制器是MVC模式中最重要的部分之一,在Spring中通常通过
@Controller
或@RestController
注解来标识。它们负责接收HTTP请求,处理请求参数,调用相应的服务方法,以及返回视图名称或直接返回数据(如JSON、XML)给客户端。 -
RequestMapping:控制器中的方法通常使用
@RequestMapping
及其衍生注解(如@GetMapping
、@PostMapping
等)来映射具体的URL路径到方法上,从而实现对不同HTTP请求的处理。
-
前端
Vue前端工程,也是可以看作使用mvc设计模式的,但也可以看作使用MVVM设计模式
- HTML + CSS:用于构建用户界面(View)。这是用户直接交互的部分
- JavaScript/TypeScript:用来实现视图模型(ViewModel,在MVVM模式下)或控制器(Controller,在MVC模式下)
在前端,模型的概念可能不像在后端那样明确,尤其是在使用纯JavaScript时。然而,当你引入TypeScript时,你可以更加严格地定义接口和类型,这有助于更好地贯彻模型概念。例如,你可以创建TypeScript接口来定义从后端接收的数据结构,或者定义状态管理库(如Vuex)中的状态结构,这实际上是在前端实现了模型的概念。