За последние 24 часа нас посетили 22094 программиста и 1105 роботов. Сейчас ищут 417 программистов ...

Реализация очереди обработчиков

Тема в разделе "Решения, алгоритмы", создана пользователем tommyangelo, 30 май 2012.

  1. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Всем привет.
    Нужен совет по реализации очереди обработчиков, нужно сделать "красивую" управляющую структуру.
    Сейчас это выглядит так (пседокод)
    Код (PHP):
    1. <?php
    2.  
    3. public function getResult($data)
    4. {
    5.     try 
    6.     {
    7.         $decoded1 = обработчик1->decode($data);
    8.         $decoded2 = обработчик2->decode($decoded1);
    9.         
    10.         $response = $mainОбработчик->process($decoded2);
    11.         
    12.         $encoded1 = обработчик2->encode($response);
    13.         $encoded2 = обработчик1->encode($encoded1);
    14.         
    15.         return $encoded2;
    16.     } 
    17.     catch (ИсключениеПервогоОбработчика $e1)
    18.     {
    19.         Действия одного типа
    20.         return $e1->getMessage();
    21.     }
    22.     catch (ИсключениеВторогоОбработчика)
    23.     {
    24.         Действия другого типа
    25.     }    
    26.     catch (Exception)
    27.     {
    28.         Действия третьего типа
    29.         throw new ApplicationException();
    30.     }
    31. } 
    И всё бы ничего, вот только управление работой программы через исключения кажутся мне бредом. Может кто сталкивался с похожей проблемой?
     
  2. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Почему одного блока try|catch не хватает? Написал в него все, что может отвалиться, внизу обрабатываешь.
    Трудно представляется пример, где такой функционал на подобии твоего может потребоваться.
     
  3. Easy

    Easy Активный пользователь

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    Например так :)
    Код (Text):
    1. <?php
    2.  
    3. function f1($data)
    4. {
    5.     //return false;
    6.     return $data + 1;
    7. }
    8.  
    9. function f2($data)
    10. {
    11.     //return false;
    12.     return $data + 1;
    13. }
    14.  
    15. function f3($data)
    16. {
    17.     return false; // типа тут ошибка
    18.     return $data + 1;
    19. }
    20.  
    21. function getResult($data)
    22. {
    23.     $ar = array();
    24.     $ar['Ошибка 1'] = 'f1';
    25.     $ar['Ошибка 2'] = 'f2';
    26.     $ar['Ошибка 3'] = 'f3';
    27.    
    28.     foreach ($ar as $er => $val)
    29.     {
    30.         if (!($data = $val($data)))
    31.             return $er;
    32.     }
    33.     return $data;
    34. }
    35.  
    36. $res = getResult(1);
    37. var_dump($res);
     
  4. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Апельсин, там и так один try и несколько catch

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

    Добавлено спустя 10 минут 10 секунд:
    Easy
    Идею я понял, подумаю в эту сторону. Спасибо.