Spring中的验证者应该访问数据库吗?

2022-09-04 07:17:39

我不太确定让验证程序根据数据库的状态验证命令是否是一个好的设计决策。例如,如果我需要验证用户Bean,除了检查电子邮件和用户名是否为空等。如果值已被使用,我还需要拒绝它们。这种逻辑应该进入验证器还是服务对象?


答案 1

好吧,您的验证器只是弹簧豆,对吧,因此它们可以与处理数据访问的服务对象一起注入。您可以让验证程序从数据库获取数据,而不会影响设计。


答案 2

这在很大程度上取决于您如何定义验证。考虑一下:您正在购买某些东西,并输入您的信用卡号。如果校验位不匹配,则验证失败。未尝试任何事务。但是,如果它是有效的信用卡号,但它与您的邮政编码不匹配(需要数据库/第三方交互),则这是付款错误。

现在考虑一下:您正在输入您的地址,并且您输入Mastiffica作为您的国家。为什么系统甚至允许您输入 - 他们应该将接口限制为仅有效条目(不需要DB后条目)。

或者,您在银行付款屏幕的金额字段中输入“五十”。为什么它允许那里的字母 - 验证失败(不需要DB)。但是,您随后在金额字段中输入50,结果发现您的帐户中没有50英镑。这是验证错误吗?还是交易失败?

现在,假设您已经通过了所有基本输入验证(信用卡校验和,国家/地区,数字,邮政编码),并且交易失败,因为您的信用卡已过期。该验证错误是失败的事务?

您可以将验证视为用户不会输入完全野生数据的基本保证,也可以将验证视为“我可以使用给定的数据完成此事务”。我个人更喜欢前者,但同样,这是定义问题。

然后是作为安全措施的第一行验证方面 - 在顶部UI层之后被接受的野生数据可能是一种安全风险(例如,SQL注入)


推荐