![]() |
![]() |
![]()
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ą.
Jednak na tamtej stronie było wyraźnie napisane, że jest to złą praktyką programistyczną. Jak to w końcu jest? |
|
|
![]() |
![]()
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 09:48 |