3 回答
TA贡献1865条经验 获得超7个赞
我认为在任何这些情况下都不应该抛出异常 - 原因如下:
异常应该用于特殊的事情 - 主要是你无法在代码中控制的事情 - 例如网络连接错误和类似的事情。
尝试从数据库接收客户,但未找到具有给定 ID 的客户。
嗯,这是理所当然的 - 您在数据库中没有找到客户 - 返回 null。没有理由抛出异常,因为在这种情况下没有什么异常。
尝试通过id删除客户,但在数据库中找不到该id。
如果在数据库中找到该客户,则此操作将导致删除该客户。
如果在数据库中没有找到它 - 最终结果仍然与找到它一样 - 那么你为什么要关心它一开始就不存在呢?同样,没有理由抛出异常。
尝试通过 ID更新客户,但在数据库中找不到该 ID。
这是最难解释的,但基本上有两种合法的方法来处理这种情况:
一种方法是,当更新语句具有不适合表中任何行的 where 子句时,执行任何数据库执行的操作 - 这只是什么也不执行。
至于让客户端知道是否有实际更新或无操作,您可以检查受影响的行数并向客户端返回 true/false 或 customer/null。
另一种方法是将更新转换为“更新插入” - 因此,如果在数据库中找不到该客户,只需创建一个新客户即可。
这也可以使用简单的真/假返回值向客户端指示。在这种情况下,您应该正确命名该方法 -AddOrUpdateCustomer
例如。
TA贡献1995条经验 获得超2个赞
您不应使用异常作为向调用者发出预期执行流程信号的方式。当函数返回时,应该返回一个有意义的值。如果你的函数返回比较复杂,无法用简单的true
/ false
returns 来表达,你可以声明 anenum
作为返回值,甚至Tuple
在更复杂的场景中也可以声明 a 。
尝试从数据库接收客户,但未找到具有给定 ID 的客户。
尝试通过id删除客户,但在数据库中找不到该id。
尝试通过 ID 更新客户,但在数据库中找不到该 ID。
所有这 3 种可能的情况都应该由数据库很好地处理,当这样的路径发生时,只需向调用者返回一个包含足够信息的值,以便它可以处理结果并正确执行操作。
TA贡献1798条经验 获得超7个赞
当出现意外错误时,您必须抛出异常。以你的例子=>
getById 调用返回项 | 如果没有找到则为 null => 如果不存在则没有错误
repo.Delete 函数必须有一个有效的 id => db 函数抛出异常(如果 ArgumentException 更好)...但是控制器/管理器需要 catch(ArgumentException) 然后有 2 个选项:
2a. '删除不存在的项目' => 成功 -> 方法调用后,项目不存在
2b. es:控制器向客户端发送错误消息“您要删除的项目不存在”
repo.Update 函数必须具有有效的 id => 像上面那样没有 2a 选项
如果函数需要这个参数=>抛出
if 函数管理 'not found=null' case => 不抛出
- 3 回答
- 0 关注
- 109 浏览
添加回答
举报