Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak duży blok try catch
hugo_amv
post
Post #1





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 22.06.2005
Skąd: Lublin

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


Na pewnej mądrej stronie ( nie pamiętam jakiej, może na java.sun.com, ale na pewno źródło było dość pewne) spotkałem się z opinią, że nie powino się umieszczać duży bloków kodu pomiędzy try catch, a jedynie krótkie fragmetny kodu i odrazu przechwytywać błędy. Ja wolę wszystkie wyjątki przechwytywać w silniku strony, a dopiero potem zajmować się ich obsługą.

  1. <?php
  2. try{
  3. /**
  4.  * Tutaj różne moduły, uruchamiaja różne klasy,
  5.  * które zwracają różne wyjątki :)
  6.  */
  7. }catch (SQLException $e){
  8. // Obługa wyjątków związanych z bazą danych
  9. echo $e;
  10. }catch (FileException $e){
  11. // Inny typ wyjątków
  12. echo $e;
  13. }catch (Exception $e){
  14. // Pozostałe rodzaje błędów
  15. }
  16. ?>


Jednak na tamtej stronie było wyraźnie napisane, że jest to złą praktyką programistyczną. Jak to w końcu jest?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Ludvik
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Cytat
Wyjątek wyrzuca treść błedu oraz kod błędu. Wieć nierozumiem po co piszesz, że wyrzucone wyjątki nie zawsze znaczą to samo? Przecież to oczywiste. Jak będe wiedział co się stało? Będe miał kod błędu i treść.

I co zrobisz z treścią czy kodem? Będziesz sprawdzał switchem po kolei kody czy opisy błędów? To zajmuje dużo miejsca i nikt, kto popatrzy na taki kod, nie będzie zachwycony, szczególnie, kiedy będzie musiał dowiedzieć się o co w nim chodzi... Wykorzystując cudzą bibliotekę możesz dostawać puste wyjątki, wtedy nie będziesz miał innego wyjścia.

Cytat
Ale skoro łapie wyjątki z całego kodu aplikacji to na pewno gdzieś te wyjątki są generowane.

Na pewno gdzieś są generowane. To teraz powiedz mi, czy łatwiej ci będzie czytać kod, w którym wyjątek może być wyrzucany w 100 czy w 5 miejscach? Po co wprowadzać zamieszanie sygnalizując możliwość wystąpienia błędu w miejscu, w którym go na pewno nie będzie...

Cytat
Jaka to sytuacja, podaj przykład?

Chociażby próba uruchomienia jakiejś akcji przez kontroler MVC. Wyjątek zwraca fabryka w przypadku braku klasy reprezentującej tą akcję. Łańcuch akcji u mnie przyjmuje postać pętli. Zawsze mogę wciąż w tej samej pętli wyłapać wyjątek i użyć domyślnej nazwy akcji nie wychodząc z łańcucha. Nie obejmuję blokiem try...catch całego kontrolera.

Termit pokazał Ci, że możesz mieć problem z ilością wyjątków. Twoim rozwiązaniem jest uogólnienie podobnych klas. Tracisz możliwość rozróżniania wyjątków po nazwach. Jeżeli w jednym bloku wyjątek może wyrzucić ci moduł obsługujący upload plików, moduł cache i jeszcze trzeci inny, to nie dowiesz się, która klasa odpowiada za błąd. Wtedy prawdopodobnie poprzenosisz różne moduły do różnych bloków.

Tak jak pisałem, wstawianie wielkiego bloku try...catch wpływa negatywnie na estetykę kodu. Nie mówię tego, bo tak mi się podoba, tylko dlatego, że swoje widziałem i wiem, który kod mi się lepiej czyta.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 09:48