иметь дело со сложными результатами в объектах - исключения? - PullRequest
3 голосов
/ 07 января 2010

Каков общий способ обработки сложных результатов от функций с объектом? Простой метод может вернуть true или false, и это все, что мне нужно знать. Более сложный метод может возвращать true или false, но может быть больше информации, которую я хотел бы получить из класса, например, почему он потерпел неудачу (может быть несколько причин).

Я мог бы сделать это с исключением, но в некоторых местах я читал, что использование исключения для «обычных» функций не является хорошей практикой. Кроме того, поскольку исключение уничтожает объект, я больше ничего не могу с ним сделать, поэтому исключение не будет работать, если я захочу продолжать использовать объект. Мне кажется, что должно произойти исключение, если что-то действительно не так, а не ожидаемая, исправимая ошибка.

Итак, еще один путь к этому - иметь свойство result после запуска метода, и если этот метод возвращает false, я могу спросить, каково для него состояние результата. Это способ сделать это?

Ответы [ 3 ]

1 голос
/ 07 января 2010

Очевидное решение: вернуть массив, например ("success" => false, "explanation" => "saw a mouse and ran screaming like a little girl", "solution" => "call an exterminator").

0 голосов
/ 08 января 2010

Я бы посоветовал вам всегда сохранять предсказуемость сигнатур методов, т. Е. Всегда возвращать один и тот же тип (будь то массив, логическое значение или что-то еще.)

Я думаю, пример проверки с помощью Zend_Validate использует разумное решение вашей проблемы путем дифференцирования результата от возможных ошибок.

0 голосов
/ 07 января 2010

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

Если вы создадите свой собственный класс исключений, вы даже можете добавить рассматриваемый объект в качестве члена к исключению, чтобы объект был доступен там, где вы обрабатываете исключение.

Исключением из этого правила является случай, когда вы генерируете исключение в конструкторе объектов. Тогда рассматриваемый объект никогда не создается .

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

Являются ли они хорошим решением для конкретной проблемы, частично зависит от опыта, поэтому вам придется попробовать их, чтобы научиться их использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...