Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Closed TopicStart new topic
> [SF]Custom Exception Listener - kiedy stosować?
porzeczki
post 3.01.2017, 00:55:05
Post #1





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 15.09.2016
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Custom Exception Listener:
- zamiast łapać wyjątek z komunikatem błędu, robię listener eventu KernelEvents::EXCEPTION, gdzie mam dostęp do obiektu wyjątku.
- i w listenerze tworzę response (lub wywołuję kontroler)
- tak to robi np TwigBundle, czyli listener wywołoje kontroler, który renderuje twig z errorem.

Tylko teraz się zastanawiam czy mam każdy wyjątek w tej sposób obsługiwać.
Kiedy catch a kiedy listener?
Go to the top of the page
+Quote Post
lukaskolista
post 3.01.2017, 13:01:51
Post #2





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


Try/catch używasz wtedy, kiedy chcesz wyłapać wyjątek i go jakoś obsłużyć. Są wyjątki przez które nie trzeba wyświetlać strony błędu, bo można np. pójść alternatywną ścieżką lub ponowić próbę. Listner służy raczej do łapania niewyłapanych wyjątków, które obsługuje się w jednolity sposób jak strona błędów.

Generalnie każde niepowodzenie powinno spowodować rzucenie wyjątku, a nawet w prostych aplikacjach jest dużo rzeczy, które pójdą nie tak i teraz to Twoja decyzja, co chcesz z nimi zrobić.
Go to the top of the page
+Quote Post
porzeczki
post 3.01.2017, 18:27:10
Post #3





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 15.09.2016
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


bo czytam o exceptions tu i tam i często mowa jest o tym że:
  • - "Wielopoziomowe" try catch usprawnia pracę, np. łapiesz wyjątek, w catchu wykonujesz jakąś akcję (ustawiesz pole Status w encji na "ERROR") i sypiesz wyjątkiem wyżej, funkcja wyżej wykonuje kolejną akcję jak np logowanie błędu etc.
  • - wyjątki wyrzucać do możliwie najbliższego poziomu wyżej, nie rozgłaszam całemu światu że jest problem - jeśli mogę naprawić problem robię to możliwie najszybciej.
  • -Extending Exceptions for Abstraction
    - każda warstwa powinna mieć swój własny typ wyjątku
    - czyli wyjątek w warstwie Model winien być schwytany w kontrolerze
    -.. i naparwiony lub owinięty i puszczony dalej jako wyj. kontrolera
    - albo jeśli biblioteka Twitter wyrzuci wyjątek
    -.. to klasa jej używająca owija go i wyrzuca nowy.
    - dzięki temu wiem gdzie wyjątek powstał i zachowana jest abstrakcja!
    - Wykorzystuje się tu metodę Exception::getPrevious()
  • - owijanie exceptions ::getPrevious() i re-thrown
    - używam jakiegoś 3rd part library, który wyrzuca jakieś wyjątki
    - te wyjątki bąbelkują i stają się częścią mojego API
    - używam annotations @throws w własnych metodach z klasami wyjątków
    - i problem jest gdy wyjątki 3rdPL zmieniają nazwy lub dodają nowe
    - i muszę zmieniać annotations @throws w własnych metodach
    - [!]ZATEM jeśli moje API nie może poradzić sobie z wyjątkiem 3rdPL:
    - to powinno owinąć i wyrzucić nowy jako wyjątek nowego poziomu
    - Dzięki temu nie jestem uzależniony od zmian w 3rdPL (wz. adapter)


a w Symfony jeb, i od razu jestem na strychu przez kernel::handle w listenerze. Nie powiem, ta opcja bardziej mi pasuje, jest wygodniejsza. Na mój rozum nie ma róznicy kiedy wyjątek jest łapany, Czy złapię go na 2 piętrze czy na strychu, przecież i tak żaden kod nie jest robiony póki nie zostanie złapany wyjątek. A w listenerze wyjątku mogę znowu puścić kod od parteru. (zastrzegam, że mam prawie zerowe doświadczenie w używaniu wyjątków.)
Go to the top of the page
+Quote Post
nospor
post 3.01.2017, 18:35:34
Post #4





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004




Juz raz walkowales ten temat tutaj
http://forum.php.pl/index.php?showtopic=25...p;#entry1207487
i Crozin raczej udzielil ci wyczerpujacej odpowiedzi.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Closed TopicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.04.2024 - 02:43