跳到主要内容

利用组合模式打造强大验证功能轻松应对复杂验证需求

注意

此组合模式验证组件比较难,如果看不懂可以跳过,不要陷入其中。项目很多亮点,不差这一个的

介绍

后端在设计接口的时候,对于参数验证的功能是相当常见的,比如说入参实体字段的必填和格式限制等相关的基础类型的验证功能,我们可以直接使用javax.validation来进行验证,本项目也是引入了此框架,较少了人为的验证工作

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

通过此框架直接在相应的实体属性上添加即可实现验证功能

以节目票档添加接口为例

@ApiOperation(value = "添加")
@PostMapping(value = "/add")
public ApiResponse<Long> add(@Valid @RequestBody TicketCategoryAddDto ticketCategoryAddDto) {
return ApiResponse.ok(ticketCategoryService.add(ticketCategoryAddDto));
}

在控制层中,方法的入参前加入@Valid即可开启验证功能。@RequestBodyspring-web提供的,将前端传入的json映射成实体类

入参实体

@Data
@ApiModel(value="TicketCategoryAddDto", description ="节目票档添加")
public class TicketCategoryAddDto {

@ApiModelProperty(name ="programId", dataType ="Long", value ="节目表id",required = true)
@NotNull
private Long programId;

@ApiModelProperty(name ="introduce", dataType ="String", value ="介绍",required = true)
@NotBlank
private String introduce;

@ApiModelProperty(name ="price", dataType ="BigDecimal", value ="价格",required = true)
@NotNull
private BigDecimal price;

@ApiModelProperty(name ="totalNumber", dataType ="Long", value ="总数量",required = true)
@NotNull
private Long totalNumber;

@ApiModelProperty(name ="remainNumber", dataType ="Long", value ="剩余数量",required = true)
@NotNull
private Long remainNumber;


}
  • @NotNull 用于验证必填的字段
  • @NotBlank 用于验证必填的字符串类型的字段

除了这两种常用的,javax.validation来提供了多种验证类型

思考

我们发现使用javax.validation只能实现基础的规范性验证,但是对于具体的业务验证来说,还是需要我们自己来开发的,当接口变多了后,有些验证的逻辑是多个接口公共需要的,大部分程序员都是将此验证逻辑抽取到一个方法放到service层里,其他接口来调用这个方法来实现的。

然后随着验证业务的逻辑变得越来越复杂了后,这些验证业务的逻辑还存在的父子层级和执行顺序的关系,如果还是采用上述方案的话,管理起来会非常的混乱,想查找某个接口的验证逻辑有哪些,查找起来只能一行一行代码的看,效率非常的低。所以为了解决复用和结构性的问题,本人利用了 组合模式 + 策略模式 + 算法 来创建出树形结构,来解决此问题

设计模式的重要性

在这里,我们讲讲为什么要去使用设计模式?

其实不使用设计模式完全也可以完成开发工作,但当项目业务越来越复杂,代码越来越多后,随之产生的对代码复杂性的问题也就产生了,不用设计模式,当下次查找或者添加新功能时,就会体验到其中的痛苦了,正所谓编程5分钟,梳理1小时,有这时间摸鱼不香吗

另外,到底怎么学习设计模式? ,绝对不是说在网上看一篇讲解文章,感觉讲的不错,自己也看懂了,就算学会了,这是错的!这根本就没有算真正的学会,正确的学习一定是先学习别人的代码,然后理解这个设计模式在项目中的作用,然后再应用到自己的项目中。当熟练了后,才真正达到融会贯通的程度。大麦网项目应用了大量的设计模式,小伙伴们可以慢慢的学习,详细当你认真的看完后,保证会提高一个层次。

下面我们来讲解如何利用组合模式和策略模式来优化参数验证功能

付费内容提示

该文档的全部内容仅对「码力全开」项目实战&技术讲解 知识星球用户开放

加入星球,一次获得完整项目资料、全栈技术知识库和长期答疑服务。

100万+字全栈技术知识库深入讲解技术核心、数据库、中间件和分布式等内容
8套热门的实战项目持续更新的企业级项目覆盖高并发、微服务、数据中台 和 AI Agent 等方向
AI 技术知识大模型面试详解覆盖 AI 模型原理、Agent、RAG、MCP、Skills、Harness 等核心知识点
文档 + 视频两种讲解形式既能系统阅读,也能跟随视频理解核心业务

完整项目实战资料

每套项目均包含从 0 到 1 讲解文档核心业务讲解视频

从基础项目到复杂业务场景,项目资料会持续更新。

8 套项目
  • 01Nexus Agent AI 智能体
  • 02Nexus Agent Pro 完全版
  • 03黑马点评Plus
  • 04大麦
  • 05大麦Pro
  • 06大麦AI
  • 07流量切换
  • 08数据中台

加入后还能获得

进入星球后,即可享受上述所有服务,保证不会再有其他隐藏费用。

从学习、面试到项目启动,都可以继续获得支持。

  • 1 对 1 解答项目和技术问题都可以提问
  • 针对性补充没有讲清楚的内容会继续补充
  • 面试与简历指导梳理回答技巧和项目亮点
  • 中间件云环境项目依赖可以直接接入使用
  • 面试后复盘被问住的问题可以继续交流
  • 远程问题解决项目启动问题可协助排查
知识星球二维码

扫码进入知识星球

  1. 打开微信,扫描左侧二维码,加入「码力全开」项目实战&技术讲解 知识星球
  2. 查看星球使用指导,获取完整项目讲解资料索引
解锁全部付费内容
🎁优惠