常用业务流程梳理Day3

文章介绍了在基于微服务的在线教育项目中,如何使用Spring的Validation注解进行参数校验,包括空值、数值和范围检查。同时详细阐述了问答系统的数据库设计,为何选择MongoDB而非MySQL存储问题和评论,强调了MongoDB的灵活性和性能优势。
摘要由CSDN通过智能技术生成

今天我们继续模拟一个基于微服务架构的在线教育项目进行业务流程梳理。

3-1 你们的项目是如何进行参数校验的

        我们在项目中是使用Spring的Validation,这是一套基于注解的权限校验框架,常用的注解有以下这些:

        空值相关:

        @Null    可以标注在任意类型元素上,被标注的元素必须为null

        @NotNull    可以标注在任意类型元素上,被标注的元素必须不能为null,但是可以为空串

        @NotBlank  可以标注在字符串类型上,被标注的元素不能为null,也不能为空串

        @NotEmpty 可以标注在字符串、集合、数组、map类型上 被标注的元素值不为null,也不能为空集合或者空串

        数值相关:

        @Min(value)    被标注的元素必须是一个数字,其值必须大于等于指定的最小值,对null无效

        @Max(value)   被标注的元素必须是一个数字,其值必须小于等于指定的最大值,对null无效

        @Range(min=,max=)      被标注的字符串的大小必须在指定的范围内,对null无效

        @Size(min=,max) 可以标注在字符串、数组、集合、map上,用于控制数组等长度

        @Length(min=,max=)     可以标注在字符串上,被标注的字符串的大小必须在指定的范围内​​​​​​​

        要使这些注解生效,需要使用一个支持Bean Validation的验证器。我们使用的验证器是Spring框架中的验证支持,具体就是在类上打上@Validated这个注解来开启验证功能,

        当校验对象中含有对象类型的属性时,需要在对象属性上使用@Valid开启级联校验

        有的属性在不同的需求下会有不同的校验规则,比如:新增时id需要为null,修改时id不能为null,此时就要开启分组校验

3-2 详细说一下你们的问答系统用到了几张表,表中的主要字段有哪些,表关系是什么

        我们在项目中的问答系统涉及到2个微服务,三张表,分别是用户微服务的用户表,学习微服务的问题表和回答表。

        用户表中主要包含:用户id,用户名和用户图片等。

        问题表主要包含:问题id,问题内容,问题描述,提问人的id,最后一个回复人的id,问题回答数量,以及一些业务相关的字段。

        回答表主要包含:回答id,问题id,评论id,回答人的id,回答的内容,回复的目标用户id,回复的目标回复id,回答次数,以及一些业务相关的字段。

        这三张表的关系为:一个用户可以提多个问题,也可以回答多个问题,和对一个问题回答多次,一个问题可以有多个回答,一个回答也可以有多个回答及评论。

3-3 你们为什么用Mongo, 而不用MySQL存储问题和评论

        我在项目中之所以用Mongo存储问题和评论,是因为Mongo有以下特点。

        1.MongoDB是非关系数据库当中功能最丰富,最像关系(MySQL)数据库的产品

        2.它支持的数据结构非常松散,是类似JSON的BSON格式,因此可以存储比较复杂的数据类型。同时其面向集合存储,并且易于存储对象类型的数据支持动态查询,及支持索引支持复制和故障恢复

        总之Mongo适合存储海量数据;且Mongo存储的多为价值较低的数据;

        问题和评论量比较多,且价值相对不高,完美契合Mongo,因此我在项目中使用Mongo存储问题和评论。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值