数据校验的最佳实践
数据校验是项目开发中重要的一环,它的目的是防止用户传递非法数据。在实践中,数据校验应该易于本地化,并且可以插入任何可用的校验器。Spring框架为BeanValidationAPI提供全面支持,包括将BeanValidationprovider引导为Springbean。这使得可以在应用程序中需要校验的任何地方注入`j***ax.validation.ValidatorFactory`或`j***ax.validation.Validator`实例对象。
通用注解和校验器
在需要校验的字段前添加注解,例如`@NotNull`、`@DecimalMin`、`@Digits`、`@Email`、`@FutureOrPresent`、`@Max`、`@Min`、`@NegativeOrZero`、`@NotBlank`、`@NotEmpty`、`@Null`、`@Past`、`@PastOrPresent`、`@Positive`、`@PositiveOrZero`、`@Size`等。这些注解分别用于检查数据的有效性,如是否为空、是否为数字、是否为电子邮件地址等。在Controller中定义一个方法,并在参数前加`@Validated`注解或`@Valid`注解以启用校验。
自定义注解和校验器
如果需要变更校验规则,不建议使用通用注解和校验器,因为这可能导致校验结果不统一。此时,可以创建自定义注解和校验器。例如,可以创建一个名为`PhoneValidateDTO`的类,其中包含一个名为`phone`的字段,并使用`@Pattern`注解来规定手机号码的格式。
数据一致性检测
数据一致性检测是对数据完整性和正确性的验证。在业务数据不一致问题的常规操作中,可以通过配置定时任务,在每个固定时间点去拉取历史一段时间的数据出来进行比对,判断是否有数据故障出现。然而,这种方法的时效性较差,对于实时性要求较高的系统来说,问题发现的越晚损失也就越大。因此,我们需要一种在线的校验模式来实时发现数据不一致问题。
在线的校验模式指的是每出现一笔数据就进行一次比对,这种比对方式还可以分为事前和事后比对。事前比对是一种业务强耦合的校验方式,我们在业务系统代码中进行类似AOP的操作,横插一段校验代码,如果校验发现问题,则阻断这次业务操作。事后校验严格上来说不能算是实时校验,因为校验的时间点滞后于真实的业务动作发生时间点,但这算是一种准实时校验,这种校验的好处在于,可以和业务解耦,不阻断业务的正常进行,还能较为实时的发现数据不一致问题。
在实际操作中,像电商这种场景下,我们进行业务功能迭代,会经过日常环境预发环境Beta测试线上环境的流程,尤其是在预发环境和Beta测试的情况下,一般会进行一些线上引流或者模拟数据测试,特点是量小,即使发生问题也只是局部不会引起灾难,那在这种场景下,事后校验的意义就显得很大,可以提前验证功能和数据的正确性,又不会对线上造成强耦合的影响;在功能完全上线后,事后校验的作用在于及时发现数据不一致问题,避免问题的进一步扩散。
数据校验的最佳实践
根据以上内容,我们可以得出以下数据校验的最佳实践:
1.在需要校验的字段前添加通用注解和校验器,以确保数据的有效性。
2.如果需要变更校验规则,可以创建自定义注解和校验器。
3.对于实时性要求较高的系统,应使用在线的校验模式来实时发现数据不一致问题。
4.在业务功能迭代过程中,可以使用事后校验来提前验证功能和数据的正确性。
5.数据一致性检测是对数据完整性和正确性的验证,需要有对账业务对数据一致性进行强保证,一旦发现数据不一致,必须要通知相关人员进行数据核对,如有问题则进行数据订正。
延伸阅读