PHP обрабатывает ошибки бизнес-логики. Может быть, дизайн-шаблон? - PullRequest
0 голосов
/ 06 марта 2011

Какие-нибудь советы о том, как обрабатывать ошибки бизнес-логики?Я не имею в виду исключения.Например, чтобы предположить, что у меня есть класс:

<?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 в базовый бизнес-класс и проверять его каждый раз, когда я вызываю метод бизнес-класса.

Ответы [ 3 ]

2 голосов
/ 06 марта 2011

Исключения именно то, что вам нужно в этом случае. Проверка состояния (это то, что вы делаете) должна привести либо к молчанию, либо к исключению. Вы должны обрабатывать исключения, генерируемые моделями, в вашем контроллере, преобразовывать их в сообщения и передавать их в представление.

2 голосов
/ 06 марта 2011

Вы здесь на правильном пути.Вы можете обрабатывать исключения в вашем ErrorController - соглашение, смоделированное в Zend, но также и во многих других средах.Вы можете создать свой собственный, если вы катите его своими руками.

Этот поток имеет более Zend-ориентированный метод обработки, но вы можете использовать ErrorController для фактической визуализации вашего представления.Обработайте ввод класса исключений $ e и получите сообщение от него.

Создание исключений из модели / представления / контроллера в приложении Zend Framework

Если вы 'Углубившись в самодельный маршрут, вы можете изящно отобразить его, если оберните свои большие блоки в try / catch и протестируете все экземпляры класса исключений.Например:

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 голос
/ 06 марта 2011

Я думаю, у вас должно быть что-то подобное.

Используйте атрибуты для хранения данных и сообщений об ошибках.И я думаю, что нелогично генерировать ошибки для if и else тоже

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";
}

[ОБНОВЛЕНИЕ]

    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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...