Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вынос обработки исключения в декоратор

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Насколько корректно?
spsu
Отправлено: 25 Апреля, 2013 - 19:11:43
Post Id



Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Нояб. 2012  


Помог: 3 раз(а)




Есть класс A который бросает 2 типа исключений , он использует класс B который тоже 2 исключения бросает.
Есть класс C который использует класс A.
В классе C почти все методы класса вызывают методы классса A.
Обработка некоторых исключений идентична в нескольких методах класса С.
Дабы не плодить повторяющийся код, хочу создать декоратор к классу A который будет ловить его исключения и обрабатывать.
Насколько это правильно?
 
 Top
caballero
Отправлено: 25 Апреля, 2013 - 20:38:47
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




писать декоратор который ловит исключения - звучит как бред сивой кобылы

try блок должен охватывать весь кусок кода
какой смысл вообще кидать исключения в методах классов и тут же их обрабатывать.

я конечно понимаю что писать с ООП - круто, но бессмысленное нагромождение классов к ООП никакого отношения не имеет.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
spsu
Отправлено: 25 Апреля, 2013 - 21:08:08
Post Id



Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Нояб. 2012  


Помог: 3 раз(а)




Есть класс HttpClient он брасает два типа исключений, CurlExaption ошибка поражденная curl есть, HttpExcaption бросается если получен HTTP код отличный от 200 и других допустимых.
Есть класс VK который бросает VkApiExcaption который бросается если возникла ошибки VK API есть VkExcaption который бросается в случае внутренних ошибок класса Vk.
VK соответсвенно имеет несколько методов для авторизации, вызова API.
Соответсвенно каждый метод оборачивается в try catch при вызове.
Произошла допустим ошибка vk api выводим сообщения в зависимости от ее кода.
И места в котором она вылезла.
Или например получен Http код 502 значит сервер подвис нужно повторить операцию а не давать сообщение о ошибке.
И.т.д...
Весь код оборачивать не оч. практично.
 
 Top
LIME
Отправлено: 25 Апреля, 2013 - 21:17:06
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




так могут быть вложенные try catch
и ловить они будут только исключения своего типа либо пробрасывать их дальше
 
 Top
spsu
Отправлено: 25 Апреля, 2013 - 21:55:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Нояб. 2012  


Помог: 3 раз(а)




LIME пишет:
так могут быть вложенные try catch
и ловить они будут только исключения своего типа либо пробрасывать их дальше

Зачем тут вложенные или я чего-то не понимаю?
Или имеется введу один глобальный для всех которые не обрабатываются, и вложенны для тех которые обрабатываются?
 
 Top
LIME
Отправлено: 25 Апреля, 2013 - 22:05:57
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




внешний try выводит сообщения
внутренний (у метода) может повторить попытку либо выбросить сообщение для внешнего
 
 Top
spsu
Отправлено: 25 Апреля, 2013 - 22:34:25
Post Id



Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Нояб. 2012  


Помог: 3 раз(а)




М.б кому поможет несколько статей по использованию исключений в PHP и вообще их использования:
Как делать надо и не надо, http://wiki[dot]agiledev[dot]ru/doku.php[dot][dot][dot]:exception_using
Использование:
http://habrahabr[dot]ru/post/58702/
http://habrahabr[dot]ru/post/58687/
http://habrahabr[dot]ru/post/100137/
Сделаю как написал LIME.
 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Апреля, 2013 - 22:51:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




caballero пишет:
я конечно понимаю что писать с ООП - круто, но бессмысленное нагромождение классов к ООП никакого отношения не имеет.
+100500!
LIME пишет:
вложенные try catch
Зачем?
spsu пишет:
каждый метод оборачивается в try catch при вызове
Давайте еще определение каждой переменной обернем. Шоп наверняка. Шоп никогда приложение не падало. Ни при каких обстоятельствах.
spsu пишет:
М.б кому поможет
Ты так написал, будто это не ты спрашивал, а у тебя.
Лови конкретный ответ на свой вопрос:
PHP:
скопировать код в буфер обмена
  1. try {
  2.   // working
  3. } catch (Exception $e) {
  4.   switch(true) {
  5.     case ($e instanceof yourException1):
  6.       // foo
  7.     break;
  8.     case ($e instanceof yourException2):
  9.       // bar
  10.     break;
  11.     case ($e instanceof yourExceptionN):
  12.       // bazz
  13.     break;
  14.   }
  15. }

Перед тем как запостить этот ответ, я не поленился зайти по всем ссылкам.
На вкус и цвет... фломастеры разные.. И нигде не было примера под твою задачу.
Пользуйся.
 
 Top
LIME
Отправлено: 25 Апреля, 2013 - 23:00:54
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




DeepVarvar пишет:
Зачем?
тут исключение можно бросить после 25й безуспешной попытки...но вложенность тут возможно и не нужна
DeepVarvar а зачем тут свитч?
можно несколько кэтчей один за другим перечислить с разными типами исключений
сработает подходящий
 
 Top
spsu
Отправлено: 25 Апреля, 2013 - 23:30:41
Post Id



Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Нояб. 2012  


Помог: 3 раз(а)




DeepVarvar , по одно из ссылок было как раз описано что так делать не стоит.
И я с этим мнением полностью согласен.
Зачем свич если можно сделать несколько блоков Catch.
Цитата:
Давайте еще определение каждой переменной обернем. Шоп наверняка. Шоп никогда приложение не падало. Ни при каких обстоятельствах.

Приложения должно быть стабильным.
 
 Top
LIME
Отправлено: 25 Апреля, 2013 - 23:53:40
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




spsu пишет:
по одно из ссылок было как раз описано что так делать не стоит.
там имелось ввиду другое
хранение признака внутри исключения вместо выброса разных типов
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB