Ostatnio pisałem o tym, co możemy zrobić, gdy nasze metody zwracają rezultat i chcemy go zmapować na odpowiedni kod http (tutaj). W tym poście podam podobne rozwiązanie, gdy nasze metody rzucają wyjątki, zamiast zwracać rezultat.
Gdy piszemy metodę, która ma coś wykonać i ta operacja się nie powiedzie, zastanawiamy się co w takiej sytuacji zrobić: czy lepiej jest rzucić wyjątek, czy może zwrócić rezultat z odpowiednim statusem? Przyjrzyjmy się obu rozwiązaniom.
Architektura 1731 dni, 1 godzinę, 51 minut temu 155 źrodło rozwiń
Może się zdarzyć tak, że nasza aplikacja rzuci wyjątek, którego się nie spodziewaliśmy. Nie wygląda to dobrze, jeśli taki nieobsłużony wyjątek trafi do użytkownika. Dodatkowo, jeśli nie otrzymamy informacji o tym, że taki wyjątek wystąpił, trudno będzie nam go poprawić i nie dopuścić do jego powtórzenia. W związku z tym warto w naszej aplikacji dodać globalną obsługę wyjątków i ich logowanie. O tym, jak skonfigurować logowanie, pisałem tutaj i tutaj. W tym poście pokażę kilka sposobów na złapanie takich...
Sztuka programowania 1758 dni, 1 godzinę, 23 minuty temu 279 źrodło rozwiń
Przegląd i streszczenie technik programowania defensywnego, na podstawie kursów Pluralsight "Defensive Coding in C#" oraz "Advanced Defensive Programming Techniques". Forma podcastu lub jego transkrypt.
Sztuka programowania 2466 dni, 15 godzin, 53 minuty temu 54 źrodło rozwiń
Kiedyś na stronach MS widziałem rekomendację mówiącą “używaj typów wyjątków dostarczanych przez framework”. Jakiś czas temu, na jakimś polskim chyba blogu, przeczytałem tego powtórkę. Wiecie co? U mnie się doskonale sprawdza kompletne przeciwieństwo tej praktyki. Zawsze w swoich aplikacjach staram się mieć jeden bazowy typ wyjątku, abstrakcyjna klasa MyAppException: Exception. Dzięki temu jestem w stanie wyłapać wszystko co rzuca mój...
Sztuka programowania 3808 dni, 19 godzin, 51 minut temu 253 źrodło rozwiń
W sprawie wydajności wyjątków można znaleźć wiele opinii, często sprzecznych ze sobą. W dzisiejszym wpisie przedstawię kilka programików, mających na celu, wyjaśnienie jaki wpływ mają wyjątki oraz ich łapanie na wydajność aplikacji. Zacznijmy od przykładów a potem przejdziemy do analizy wyników. Kod z wyrzucaniem wyjątków: internalclass Program { privatestaticvoid Main(string[] args) { constint n =20000; Stopwatch stopwatch = Stopwatch.StartNew(); for (int i =0; i < n;="" i+...
Sztuka programowania 4131 dni, 3 godziny, 29 minut temu 285 źrodło rozwiń
Nierzadko jest tak, że aplikacja zachowuje się nieprawidłowo, jednak wszystkie wyjątki są przechwycone i nie ma żadnej informacji (czy to wizualnej, czy tez w logach) o tym, że wydarzyło się coś niepokojącego, program po prostu dalej działa. Klasyczny przykład, to ‘połykanie’ wyjątków, czyli konstrukcja typu: try {...KOD...} catch(Exception) { } czyli blok obsługi wyjątku jest puściutki :) My jednak wyczuwamy jakąś zmyłkę i chcemy dowiedzieć się, co też poszło nie tak. Systemowy mechanizm obsługi wyj...
Nieprawidłowa obsługa wyjątków może przynieść więcej problemów niż pożytku. O obsłudze błędów można byłoby napisać artykuł, jednak w poście chciałbym skupić się wyłącznie na kilku aspektach. 1. Pierwszym problemem jest fakt, że część programistów używa wyjątków do sytuacji po prostu niewyjątkowych. Jak sama nazwa mówi, wyjątek powinien być zastosowany gdzie może zdarzyć się coś niespodziewanego. Spójrzmy więc na poniższy fragment:int number; try { number =int.Parse(text); } catch { numbe...
Architektura 4678 dni, 22 godziny, 27 minut temu 462 źrodło rozwiń
Programując własne biblioteki, często potrzebujemy zdefiniować własny typ wyjątku. Przeglądając różnego rodzaju kody źródłowe nierzadko spotykam błędną deklarację własnych wyjątków:publicclass MyException : Exception { // specyfikacja } Co prawa kompilator nie zgłosi błędu ale już np. CodeAnalysis zwróci nam uwagę o błędnej deklaracji. Najprościej korzystać w Visual Studio z tzw. snippet’ów czyli gotowych fragmentów kodu. Naciskając klawisze ctrl+space pojawi nam się lista dostępnych snippetów w VS...
Domyślnie WPF wyświetla okno dialogowe nieobsłużonego błędu a następnie po przyciśnięciu przycisku aplikacja zostaje zamknięta. W poście zajmiemy jednak się przeładowaniem tego zachowania poprzez np. zapis błędu do pliku. W WPF możemy wykorzystać zdarzenie DispatcherUnhandledException(plik App.xaml.cs), która wywoływana jest dla nieobsłużonych wyjątków. Jeśli zatem w kodzie znajdzie się wywołanie throw bez klauzuli catch, zdarzenie DispatcherUnhandledException zostanie uruchomione. Przykład, plik app.xam...
Jeśli drażnią cię te polskie komunikaty wyjątków w VS i chciałbyś/-abyś to zmienić to przede wszystkim wytłumacz się dlaczego. Komunikaty wyjątków nie powinny być widoczne dla użytkownika, więc jedyna sytuacja, która wymagałaby takiej interwencji, a jest to poszukiwanie informacji w Internecie dlaczego dany wyjątek występuje. Wiadomo w języku angielskim znajdziemy więcej i komunikat po polsku może w tym przeszkadzać (oczywiście dużą częśc wyjątków możemy sobie po prostu przetłumaczyć). Są dw...
Ten artykuł pochodzi z serii przygotowań do egzaminu 70-503: Windows Communication Foundation. Dzisiaj dowiemy się jak obsługiwać wyjątki serwisu po stronie klienta. WCF sygnalizuje wyjątki wykorzystując błędy SOAP. Wyróżniamy dwa typy błędów które mogą być wykorzystane: błędy typowane/deklarowane (ang. typed faults/declared SOAP faults) i beztypowe/niedeklarowane (ang. untyped faults/nondeclared SOAP faults).Odbieranie błędów Teoretycznie podczas korzystania z WCF’a możliwie jest występowanie wielu róż...
Programowanie rozproszone 5307 dni, 13 godzin, 4 minuty temu 33 źrodło rozwiń
Projektanci WCF zostawili w swoim produkcie bardzo dużo półprzymkniętych furtek czekających tylko na odkrycie i wykorzystanie ich potencjału. Jednym z takich czarodziejskich otworów do przyjemnego, różowego, miękkiego wnętrza WCF jest infrastruktura Behaviors (więcej o, między innymi, nich, na przykład w artykule "Extending WCF with Custom Behaviors"). Z ich pomocą można osiągnąć baaardzo wiele, między innymi: w niesamowicie elegancki sposób zebrać w jednym miejscu wszystkie błędy wygenerowane przez nasz...
Architektura 5453 dni, 17 godzin, 57 minut temu 95 źrodło rozwiń
Nie każdy zdaje sobie z tego sprawę ale poniższe dwie konstrukcje mają inną semantykę: try { ... } catch(Exception ex) { throw; } try { ... } catch(Exception ex) { throw ex; } Różnica jest taka, że stosując pierwszą z nich nie tracimy informacji zawartej w stosie wywołań (stack trace). To znaczy, że jeśli ponownie rzucony przez nas...
NULL vs. Exception, a może alternatywa? filed in .NET, Programowanie on Aug.13, 2009 Czasem tak się dzieje, że czytając swój własny kod pierwszy raz od kilku miesięcy mamy problem z jego zrozumieniem, zwłaszcza jeżeli nie komentujemy go w odpowiedni sposób. Ale nie jest to jedyna przyczyna problemu. Ostatnio analizując stare projekty doszedłem do wniosku, że istnieje w nich mnóstwo kodu zaciemniającego rzeczywistą logikę działania. Mam tu na myśli dziesiątki wyrażeń postaci if (something != null) i podo...
Architektura 5561 dni, 19 godzin, 29 minut temu 112 źrodło rozwiń