在哪里进行皮肤验证?

时间:2020-02-11 21:34:38

标签: java hibernate

放置自定义验证以及它可能具有的多种变体或条件的最佳位置在哪里?

谢谢!

2 个答案:

答案 0 :(得分:2)

我认为DAO不应包含应用程序逻辑。服务层应进行所有验证,并返回有意义的错误消息。在这种情况下,我将要求DAO查找产品,如果找到,则表示该产品是重复的。

现在我要稍微矛盾一下自己。

在我的代码中,DAO确实包含基本检查,例如字段长度。这些是对应用程序验证之外的偏执检查,因为在这种情况下,我们使用的数据库产生的错误消息是无用的,并且检查便宜。在主键重复的情况下,数据库错误消息可用,并且偏执检查会太昂贵。但是,如果您认为应该这样做,可以将其作为一种安全措施。这基本上是成本与收益分析。

答案 1 :(得分:1)

我同意@Jonathan-但表达方式略有不同,以防万一。

什么算作“已经存在”的产品名称/别名?我们是在谈论完全匹配的字符串吗?我们是否需要考虑数据输入的变化(大写/小写;带有/不带有重音符号/变音符号的单词;等等)?如果您需要严格的String相等性,则业务逻辑可能会介入其中。

我的偏好是在此处将最少数量的此类检索逻辑放入DAO层-这通常归结为where语句(或Hibernate ORM变体)的select子句中的内容。不要将逻辑视为“检查重复项”,而是返回结果集。那是DAO特有的。

其他所有内容(对结果集中的数据进行处理以检查重复项)都在服务层中。

(顺便说一句,如果经验可以指导,如果您还没有全文索引,那么您可能最终需要全文索引。)