【发布时间】:2016-11-23 17:01:52
【问题描述】:
我了解到,异常不应用于指导应用程序的流程,而应用于在发生“异常”时(例如,当您无法连接到数据库。
不应使用异常的一个示例是用户提供了不正确的登录名。这不会是一个例外,因为预计会发生这种情况。
我不确定以下情况是否例外:
我目前正在设计一个简单的博客。一个“帖子”只分配给一个“类别”。在我的帖子表中,我有一个带有外键约束的 category_id 字段。
现在,我正在使用 Laravel,因此如果我尝试删除当前包含帖子的类别,我相信由于外键约束,它应该抛出 \Illuminate\Database\QueryException。因此我应该依赖这个并编写如下代码:
try {
$category->delete();
}
catch (\Illuminate\Database\QueryException $e) {
// Tell the user that they can't delete the category because there are posts assigned to it
}
或者既然我知道我希望我的博客如何工作,我应该使用:
if ($category->posts->isEmpty()) {
$category->delete();
}
else {
// Tell the user they can't delete...
}
任何建议将不胜感激。谢谢!
【问题讨论】:
-
我认为这主要是基于意见的,但我会选择第二种选择。为什么? 1. 使规则清晰。 2. 使其他类型的数据库异常不会产生误导性错误。 3. 这样如果有人开启级联删除,你的逻辑还是一样的。
-
继续@DarkFalcon 的回答,抛出异常是一项繁重的操作,所以你应该只在你真的没有发生的情况下使用它。