주로 어디서 함?
spring 쓸때는 프레임워크에서 알아서 해줘서 신경 별로 안썼는데
php로 패턴 만드는데 어떻게 처리해야될지 느낌이 안와서
지금
try
{
$this->dao->startTransaction();
$this->dao->proc1($param);
$this->dao->proc2($param);
$this->dao->proc3($param);
$this->dao->commit();
}
catch(Exception $e)
{
$this->dao->rollback();
ExHandler::redirect($e->getMessage() );
}
대충 서비스가 이런 모양이고
controller에선 만들어놓은 service를 그냥 호출을 하는걸로 끝인데
예전에 자바로 만들때 service단에서는 exception을 여기서 처리 안하고 그냥 throw 시키고 처리까진 하지 않았던것 같아서
catch에서 redirect 하는거 대신에 그냥 다시 exception throw 하고 controller에서 다시 이거 try catch로 잡아서 catch에서 처리하는건가?
상위에서 try 하고 서브루틴에서 throw로 파급시키는것도 괜찮고ㅇㅇ - dc Cpp
일반론으로 말하자면, 계층이 나뉜 서비스에서 저렇게 로컬에서 예외처리 하는 건 안티 패턴이다. PHP는 잘 모르겠다만 내가 이해한 게 맞다면 계층 분리부터 좀 애매한 코드 같은데, 리다이렉션은 컨트롤러의 역할이지만 트랜잭션은 원래 서비스나 DAO 단이 맡는 게 정상이기도 해서, 이래저래 좀 관심사가 섞여 있는 것 같은 느낌도 있네...
실제 예외는 비즈니스 레이어에서 뱉어내고 (service) 그에대한 트랜잭션은 dao에서 담당하고 해당 예외에 대한 뷰 라우팅만을 컨트롤러에서 처리하도록 하면 책임분리가 확실하게 됨. 그렇게 하기 위해선 예외 핸들링 컨트롤러와 예외에 대한 명세가 필요하겠지