![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Ostatnio ciekawi mnie temat używania Exceptionów - muszę przyznać, że trochę słabo to czuję. Kiedyś Exception stosowałem do rzeczy, które po prostu mogły spowodować niedziałanie aplikacji - np. brak dostępu do pliku czy coś podobnego. Ostatnio jednak widzę, że coraz częściej w nowych bibliotekach Exceptiony stosuje się w inny sposób tj. do wymuszenia typowania metody bez zwracania NULL.
Np taka klasa:
Pierwsza metoda (podejście o którym mówię) nigdy nie zwraca nulla, tylko obiekt lub rzuca wyjątek. Druga metoda (tradycyjna) zwraca obiekt lub null. Które podejście stosujecie? Dlaczego. Ja po rozmowie z kolegą zacząłem skłaniać się ku pierwszej wersji i brak możliwości zwrócenia oczekiwanego obiektu traktuję jako wyjątek.Podświadomie wydaje mi się to bardziej logiczne i wymusza trochę więcej dyscypliny. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Jeśli przy próbie pobrania czegoś leci wyjątek, to problemem jest brak tego czegoś i to ten problem należy rozwiązać, czyli najpierw ->hasItem($id) a potem ->getItem($id) zamiast try+catch
Cytat Try/catch (po przezywyczajeniu) wydaje mi się bardziej czytelny, jeśli oczywiście stosujemy szczegółowe wyjątki a nie \Exception Kiedyś widziałem taki kod:
A potem try + catch jak trzeba wyświetlić formularz logowania, od wuja "instance of" (IMG:style_emoticons/default/facepalmxd.gif) Używanie wyjątków do implementacji logiki nie jest w niczym lepsze od używania goto. Potem masz pincet wyjątków, jeden jest tłumaczony na inny, łapane są w każdych możliwych miejscach, tworzy się pajęczyna zależności i zamiast aplikacji jest burdel. Cytat Ja bym jednak wolał aby repozytoria zwracały puste tablice/kolekcje oraz null - jeśli obsługa czegoś nie jest jednoznaczna (np. Athabus chce okodować sytuację, kiedy host nie odpowiada, natomiast Markonix woli mieć w takiej sytuacji exception i stronę błędu) to wiele bibliotek daje możliwość konfiguracji:http://docs.guzzlephp.org/en/stable/reques...tml#http-errors I powiem znowu: wg mnie wyjątki są po to, aby czegoś nie obsługiwać a nie odwrotnie, jeśli leci wyjątek a mimo to go łapiemy bo chcemy, żeby aplikacja działała dalej to oznacza to, że jest to workaround bo albo czegoś nie przewidzieliśmy (np. tego, że brak połączenia z jakimś API nie musi wywalać aplikacji) albo nie zaimplementowaliśmy (np. w podanym przykładzie próbujemy coś pobrać bez wcześniejszego sprawdzenia, czy to coś istnieje). Cytat Które podejście stosujecie? Dlaczego. Zdroworozsądkowe, generalnie nie przesadzać z rzucaniem wyjątku, jak najczęściej dawać wybór, nawet w sposób dynamiczny, np. jeśli mamy obiekt ACL i metodę ->hasRole, to możemy przekazać parametr czy chcemy boolean'a czy exception. Jak sprawdzamy w kontrolerze to lepszy jest exception, jak w templacie to boolean (IMG:style_emoticons/default/Lkingsmiley.png) Znajdziemy też pewnie sporo takich przykładów w samym PHP: http://php.net/manual/pl/pdo.error-handling.php |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 04:12 |