2011-03-06 1 views
0

비즈니스 로직 오류를 처리하는 방법에 대한 정보는 무엇입니까? 나는 예외를 의미하지 않는다. 예를 들어, 않도록 내가 클래스가 있다고 가정 :PHP에서 Bussines 논리 오류 처리. 어쩌면 디자인 패턴일까요?

<?php 
class Reactor() { // business class 
    public function shutdown() { 
    if($date > '2 pm') { 
     // show error message to user 
     echo 'you can't shutdown before 2 pm.'; 
     } else { 
     // error while trying to shutdown 
      throw new Exception('Oh my God, it is gonna blow!!'); 
     } 
    } 
} 
?> 

진짜 문제는 내 의견에 오류 메시지를 전달하는 방법입니까? 예외는 예외적 인 경우에 유용합니다. ErroMessage 및 ErrorCode 특성을 기본 비즈니스 클래스에 추가하고 비즈니스 클래스 메서드를 호출 할 때마다이를 확인하는 것이 좋습니다.

답변

2

실제로 올바른 길을 가고 있습니다. Zend에서 모델화 된 컨벤션 인 ErrorController에서 예외를 처리 할 수 ​​있지만 다른 많은 프레임 워크에서도 예외를 처리 할 수 ​​있습니다. 당신은 그것을 DIY 롤 경우 자신을 만들 수 있습니다.

이 스레드는 Zend 중심의 처리 방법이 있지만 실제로 ErrorController를 사용하여보기를 렌더링 할 수 있습니다. $ e 예외 클래스의 입력을 처리하고 그로부터 메시지를 가져옵니다. 당신은 DIY 경로에서 깊은 경우 당신이 시도/잡기에 더 큰 블록 포장 및 예외 클래스의 모든 인스턴스를 테스트하는 경우

Throwing exceptions from model/view/controller in a Zend Framework application

, 당신은 정상적으로 표시 할 수 있습니다. 예를 들면 다음과 같습니다.

class Reactor() { // business class 
    public function shutdown() { 
    if($date > '2 pm') { 
     // show error message to user 
     echo 'you can't shutdown before 2 pm.'; 
     } else { 
     // error while trying to shutdown 
      throw new Exception('Oh my God, it is gonna blow!!'); 
     } 
    } 
} 

//later, in the controller 

$reactor = new Reactor(); 
try{ 
    $reactor->shutdown('1pm'); 
} catch(Your_Custom_Exception $e){ 
    //pass to view 
    $this->view($e->getMessage()); 
} catch(Exception $e){ 
    // woops, serious error. do something useful 
} 
1

나는 이렇게 생각해야합니다.

속성을 사용하여 데이터 및 오류 메시지를 저장합니다. 그리고 내가 그것을

public function shutdown() { 
    if($date > 2) { 

     $this->errorstatus = true; 
     $this->error['date'] = "You cannot shutdown before 2 pm"; 

    } else 

     if($this->poweroff) 
      return true; 
     else 
      throw new Exception("ERROR WHILE SHUTTING DOWN"): 
    } 

    private function poweroff() 
    { 
     //if power off then return true 
     //else return false 
    } 
+0

그는 if와 else에도 오류를 생성하지 않습니다. 그는 다른 사람이 실제로 종료를 시도해야한다는 것을 의미하지만 그 과정에서 오류가 발생할 수 있습니다. –

+0

@Sebastian은 그가 종료하려고하면 오류를 생성 할 수 없다는 의미입니다. 코드 –

+0

을 업데이트 할 것입니다. bussines 오류가 예외를 생성해서는 안된다는 것이 내 의견입니다. http://stackoverflow.com/questions/534096 /해야 - 비즈니스 규칙 - 위반 - 던져 - 예외, 그래서 나는 bussines 논리 에로에 대한 custon sxceptions 잡는 피하려고 노력하고있어. 나는 내가 ErrorCode와 ErroMessage와 함께 갈 것이라고 생각한다. 모든 원수에게 도움을 주셔서 감사합니다. – uacaman

2

예외는 당신이이 경우에 필요한 정확히 무엇 ifelse 너무

class Reactor{ 

    public $date; 
    public $error; 
    public $errorstatus = false; 
    //Use property to store data and errors 

    public function shutdown() { 
    if($date > 2) { 

     $this->errorstatus = true; 
     $this->error['date'] = "You cannot shutdown before 2 pm"; 

    } else 
     return true; 
    } 

} 

$reactor = new Reactor(); 

$reactor->data = 3; 

$reactor->shutdown(); 

if($reactor->errorstatus){ 
    echo $reactor->error['date']; 
} 
else{ 
    echo "Its already two you can shutdown"; 
} 

echo "<br/>"; 

$reactor->data = 1; 

$reactor->shutdown(); 

if($reactor->errorstatus){ 
    echo $reactor->error['date']; 
} 
else{ 
    echo "Its already two you can shutdown"; 
} 

[업데이트]에 대한 오류를 생성하는 비논리적 생각합니다. 상태 유효성 검사 (현재 수행중인 작업)는 무음 또는 예외로 연결됩니다. 컨트롤러에서 모델이 던진 예외를 처리하고 메시지로 변환 한 다음 View로 전달합니다.