- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
目前我的 PHP MVC 网络应用程序中有此客户端代码:
try {
BookMapper::insert($book);
} catch (DbUniqueConstraintViolationException $e) {
$errorList->addMessage($book . " already exists!");
}
我想知道在我的客户端代码中引用低级框架 Db* 异常是否是一种不好的做法?如果是这样,我是否应该像这样调整我的模型代码:
class BookAlreadyExistsException extends Exception { }
class BookMapper {
public static function insert($book) {
try {
// call to DB-layer to insert $book
// (not relevant to the question)
} catch (DbUniqueConstraintViolationException $e) {
throw new BookAlreadyExistsException();
}
}
}
然后使用这个新的客户端代码...
try {
BookMapper::insert($book);
} catch (BookAlreadyExistsException $e) {
$errorList->addMessage($book . " already exists!");
}
还是别的?还是原来的方法就可以?
谢谢!
编辑:只是想补充一点,后一种方法读取最好的 IMO,但它伴随着对象创建/重新抛出开销,更重要的是,它需要在每个映射器的 insert() 方法中复制重新抛出代码。前一种方法易于实现和捕捉,适用于任何模型,但我记得在某处读到过你不应该这样做?
最佳答案
我认为您应该明确地抛出您自己的异常。
但我还会考虑第三种选择,即让插入方法在成功时返回 true,在失败时返回 false。异常(exception)应该用于异常(exception),并且一本书已经存在的事实实际上可能是一种预期/可预测的情况。
如果重复的书籍确实是不应该出现的异常(exception)情况(除非编程错误),那么您也可以坚持使用数据库异常,但在那种情况下不要捕获它。让它一直冒泡。
关于php - 以不同的名称重新抛出异常?什么是标准做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1436868/
如果您想分享更多信息,可以在这里找到整个资源 指针: https://github.com/sergiotapia/DreamInCode.Net 基本上,我的API将为其他开发人员提供
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我不是 SCM 工具的经验丰富的用户,尽管我确信它们的用处,当然。 我在以前的工作中使用了一些不起眼的商业工具,在当前的工作中使用了 Perforce,并在我的小型个人项目中使用了 TortoiseS
所以我想知道一些我应该避免在 javascript 中做的事情以获得良好的 SEO 排名。在我的下一个站点中,我将广泛使用 jquery 和 javascript,但不想牺牲 SEO。那么您认为我应该
基本上,我想知道什么是避免 future CSS 代码出现问题和混淆的最佳方法... 像这样命名 CSS 属性: div#content ul#navigation div.float-left (真
我是一名优秀的程序员,十分优秀!