利用组合模式打造强大验证功能轻松应对复杂验证需求
注意
此组合模式验证组件比较难,如果看不懂可以跳过,不要陷入其中。项目很多亮点,不差这一个的
介绍
后端在设计接口的时候,对于参数验证的功能是相当常见的,比如说入参实体字段的必填和格式限制等相关的基础类型的验证功能,我们可以直接使用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即可开启验证功能。@RequestBody是spring-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小时,有这时间摸鱼不香吗
另外,到底怎么学习设计模式? ,绝对不是说在网上看一篇讲解文章,感觉讲的不错,自己也看懂了,就算学会了,这是错的!这根本就没有算真正的学会,正确的学习一定是先学习别人的代码,然后理解这个设计模式在项目中的作用,然后再应用到自己的项目中。当熟练了后,才真正达到融会贯通的程度。大麦网项目应用了大量的设计模式,小伙伴们可以慢慢的学习,详细当你认真的看完后,保证会提高一个层次。
下面我们来讲解如何利用组合模式和策略模式来优化参数验证功能
付费内容提示
该文档的全部内容仅对「JavaUp项目实战&技术讲解」知识星球用户开放
加入星球后,你可以获得:
- 超级八股文:100万+字的全栈技术知识库,涵盖技术核心、数据库、中间件、分布式等深度剖析的讲解
- 讲解文档:黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的从0到1的550+详细文档
- 讲解视频:黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的核心业务详细讲解
- 1 对 1 解答:可以对我进行1对1的问题提问,而不仅仅只限于项目
- 针对性服务:有没理解的地方,文档或者视频还没有讲到可以提出,本人会补充
- 面试与简历指导:提供面试回答技巧,项目怎样写才能在简历中具有独特的亮点
- 中间件环境:对于项目中需要使用的中间件,可直接替换成我提供的云环境
- 面试后复盘:小伙伴去面试后,如果哪里被面试官问住了,可以再找我解答
- 远程的解决:如果在启动项目遇到问题,本人可以帮你远程解决
