현재 내 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!");
}
또는 무언가? 아니면 원래의 방법은 괜찮습니까?
감사합니다.
EDIT : 후자의 메서드는 가장 좋은 IMO를 읽지 만 개체 생성/재배치 오버 헤드가 있으며 더 중요한 것은 모든 매퍼의 insert() 메서드에서 재실행 코드를 복제해야한다는 것입니다. 이전 방법은 구현하기 쉽고 모든 모델에서 작동하고 작동하지만 어딘가에서이 방법으로는 안된다는 것을 기억합니다.
돌아 오는 참/거짓 사실. 다른 클라이언트 코드에서 더 많이 알 필요가 있다면? 예를 들어, 어떤 제약 조건이 위반되었습니다. 예외가 있으면 예외 오브젝트에서이 정보를 사용할 수 있습니다. 진실/거짓으로 나는 그것을 어떻게 얻을 것인가? "getLastSqlStateError()"또는 뭔가를 DB 레이어에 추가 할 것을 권합니다. –
+1 추천하는 경우 예외 대신 true/false를 반환합니다. –
누구든지 내 첫 번째 의견에 대해 조언을 제공 할 수 있습니까? –