![]() |
![]() |
![]()
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: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 22.06.2005 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
No pomysl sobie czy jesli bedziesz mial powiedzmy tysiac lini kodu i rzuci CI wyjatek czy aby wszystko dobrze potrafisz osbluzyc i bedziesz wiedzial w ktorym miejscu to wystapilo. Zaleceniem jest stosowanie jak najmniejszej ilosci kodu w bloku try Tworze klasy dziedziczące po Exception i jestem w stanie każdy wyjątek odpowiednio obsłużyć. Jak padła baza danych to wyświetla się 'awaria bazy danych, przepraszamy', jak użytkownik nie ma praw dostępu do pliku to inny komunikat. Wyobraź sobie że moduł napiszę Ci ktoś inny. Z kąd będziesz wiedział czy nie stworzy nowego wyjątku, i jak go obsłużyć. Jak ktoś inny stworzy moduł to będzię musiał ze mną skontaktować jakie może zwracać wyjątki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) A tak poważnie to tu masz racje, mała niedogodność. Po za tym im mniejsze bloki try, tym mniej wyjątków umieścisz jednocześnie, więc mniej siedzi w pamięci (oszczędność zasobów (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) Wydaje mi się, że tylko jeden wyjątek jest zgłaszany ( umieszczany w pamięci), a nie wszystie pokolei, a program odrazu przechodzi do pierwszego napotkanego boku catch. Ten post edytował hugo_amv 3.06.2006, 15:06:47 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 225 Pomógł: 18 Dołączył: 30.06.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Wydaje mi się, że tylko jeden wyjątek jest zgłaszany ( umieszczany w pamięci), a nie wszystie pokolei, a program odrazu przechodzi do pierwszego napotkanego boku catch. W sumie to się za bardzo rozpędziłem. Może inaczej. php po wyrzuceniu wyjątku przecodzi na koniec try{} i przechodzi przez wszystkie catch aż znajdzie odpowiedni. Przy dużej ilości wyjątków po jednym catch może to na prawdę trochę zająć. Wiesz co do obsługi nieznanych wyjątków. Po to się tworzy nowe typy wyjątków żeby je odpowiednio obsłużyć. Reszte możesz co najwyżej wyświetlić albo zrobić ew jeszcze switch{}(w domyslnym bloku) i sprawdzać kody błędów. TYLKO PO CO? Czytelność i przenośność to podstawa. Masz tu chipotetyczną sytuację. Tworzysz jakąś klasę np do obsługi księgi gości. Genreuje ona ew kilka charakterystycznych wyjątków. Jeżeli to twój projekt to pozostaje Ci tylko przekopiowanie wszystkich bloków catch które dotyczą tych wyjątków (tutaj łatwo o pomyłkę) i wklejenie ich do nowego projektu. Gorzej jeżeli to projekt zewnętrzny(jak większy to pewnie jeszcze z wykorzystaniem MVC). Z resztą wyjątki możesz podzielić na 2 grupy: 1. Te które może obsłużyć sam moduł. 2. Te które wymagają akcji konkretnego programisty. Skąd możesz wiedzieć czy ICH projekt też jest cały w try{}. Może zależnie od widoku admin będzie chciał inaczej obsłużyć konkretny wyjątek? I za każdym razem wklejanie kodu z catch{} wyjątków typu 1 tam gdzie używasz klasy/modułu? Masz wtedy trochę zabawy. :/ Ale to moje zdanie. Jak obsługuję wyjątki odrazu to się potem nie zastanawiam czy na pewno zająłem się wszystkim, zwłaszcza jak robię coś większego. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 20:37 |