【发布时间】:2020-02-20 08:42:40
【问题描述】:
对于唯一字段 - 电子邮件,用户表中的数据库级别存在限制。也就是说,如果我们尝试使用现有电子邮件地址保存用户,则会发生 SQLServerException。在这种情况下,我们可以捕获这个技术异常,创建然后抛出我们自己的技术异常。
但我们也可以向数据库发出请求并检查用户是否存在,然后抛出我们自己的逻辑异常。
问题是哪个选项更可取?
【问题讨论】:
-
技术和逻辑异常不是 java 类型,恐怕这个问题对我来说没有多大意义。但我想说的是,当您尝试插入已经存在的电子邮件时抛出异常是正常的。对于另一种情况(查询用户是否已经存在),我宁愿有一个返回布尔值而不是异常的方法
-
技术和逻辑异常是异常的另一种分类。什么是逻辑异常? - 例如,用户输入了错误的值,结果我们得到一个负的余额值。按照我们的逻辑,余额不能为负数,应该抛出异常。
-
@Bentaye 逻辑异常也称为业务异常
-
@Nico 我很想知道你对这个案例的看法(使用 db 查询检查用户是否存在)这个例外是生意吗?
-
@alexis_druzik 是的,这是一个商业例外,您决定您的软件不允许用户注册两次。但是您可以选择允许一个用户注册多次(当然,对于用户体验来说,拥有多个具有相同电子邮件的帐户是没有意义的......而且由于其他原因也没有意义)。