CodeIgniter и исключения бросания

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

Я узнал, как делать исключения и как использовать try...catch блоки для uh, улавливать и обрабатывать их, но каким-то образом, когда я начал использовать CodeIgniter, я забыл все о них и больше не использовал исключения.

Вместо этого я просто обрабатывал свои ошибки вручную, из-за отсутствия лучшего слова: я бы использовал логические значения TRUE и FALSE чтобы проверить, правильно ли выполнялся запрос, и я бы использовал возвращаемое логическое значение для обработки результата запроса. Если TRUE , я бы пошел дальше и делал свои вещи, если FALSE я «вручную» выдал сообщение об ошибке. Проект был очень зависимым от AJAX, и сообщения об ошибках появлялись довольно причудливо, сбрасывая верхнюю часть страницы; не уверен, что это возможно, когда я бросаю исключение с throw new Exception ? Я знаю, что это в основном останавливает выполнение кода при возникновении исключения, так что бы это не так сломало?

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

В случае необходимости я мог бы вернуться и попытаться найти фрагмент кода, где он указал, что я должен был исключить исключение. Однако на данный момент мне просто интересно, следует ли использовать исключения в моем коде или обрабатывать вещи вручную. Каковы наилучшие практики в этом отношении?

Благодарю.

Просто FYI, я не использую исключения в CodeIgniter, потому что я много использую их в Kohana, только потому, что фреймворк бросает их, и все предназначено для работы с исключениями, в отличие от CodeIgniter. Использование исключений – хорошая практика, обеспечивающая, чтобы все ваши классы / рамки были разработаны для работы с ними.

Я не хочу (действительно, НЕ НУЖНО) хотеть участвовать в обсуждениях в рамках сравнения, но мне нужно сравнить два фрагмента кода, чтобы прояснить ваш вопрос, одну часть из CI2 и еще одну из Kohana 3 (она родилась как филиал CI с лучшей объектно-ориентированной реализацией).

Вы увидите этот код CI2 …

 try { $result = $this->db->insert('entries', $this->input->post()); // This is not useful. if ( ! $result) { throw new Exception(); } } catch (Exception $e) { // Do something } 

Это не очень полезно. Сравните с этим кодом Kohana 3:

 try { $entry = ORM::factory('blog'); $entry->values(Request::current()->post()); $entry->save(); } catch (ORM_Validation_Exception $e) { Session::instance()->set('form_errors', $e->errors(TRUE)); } 

Вы увидите, что это полезно, вы не генерируете исключение, оно бросается классом, который обрабатывает сохранение записи, а $e->errors имеют все ошибки проверки. Когда все предназначено для работы с исключениями, вы можете быть уверены, что это хорошая практика и очень удобная. Но это не относится к CI2, поэтому, может быть, я должен сказать, что не будем использовать исключения.


Возможный подход к исключениям в CI …

 try { $this->load->model('blog'); $this->blog->save_entry($this->input->post()); // Handle validation inside the model with the Form_validation library } catch (Validation_Exception $e) // You throwed your custom exception with the failed validation information { // Do something with your custom exception like the kohana example $this->session->set('form_errors', $e->errors()); } 

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