В настоящее время у меня есть этот клиентский код в моем веб-приложении 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 () каждого преобразователя. Первый способ прост в реализации, уловке и работает для любой модели, но я помню, что читал где-то, что вы не должны делать это таким образом?