W jaki sposób, opracowując średni projekt, identyfikujesz, tworzysz i utrzymujesz kody błędów?
Przez całe życie nie mogę wymyślić prostej i czystej metody. Niektóre z moich pomysłów konwertują nazwy klas i nazwy metod na ciąg liczb całkowitych, ale jest to zbyt długi sposób na wyświetlenie użytkownikowi poza tym, że nazwy metod i nazw klas mogą się zmienić (mam nadzieję, że nie!). Inni używają tylko systemu dziennika inkrementacji (tj. Kiedy tworzę nowy komunikat o błędzie, po prostu dodaj 1 do identyfikatora ostatniego komunikatu o błędzie). Ale to jest po prostu całkowicie niezorganizowane.
Mówiąc dokładniej, mówię o kodzie błędu, takim jak:
Error 401 Unauthorized.
error-messages
Ahodder
źródło
źródło
Odpowiedzi:
Nie.
Kody błędów są anachronizmem, wywodzą się z dawnych czasów, kiedy wyjście było naprawdę trudne i kosztowne, a jedynym sposobem sygnalizowania błędu może być kilka lampek na przednim panelu:
Obecnie mamy dojrzałą obsługę wyjątków wbudowaną w prawie każdy główny język. Użyj tego. Podaj informacje o użytkowniku, z którymi może współpracować; nie zawracaj im głowy technicznymi bla-bla, ale raczej powiedz im z grubsza, co poszło nie tak i co mogą z tym zrobić. Aby się zalogować, podaj wyjątki opisowe nazwy i zaloguj się. Łatwiejsze do zapamiętania, a także łatwiejsze do znalezienia za pomocą grep lub podobnych narzędzi wyszukiwania.
Wyjątkiem jest oczywiście programowanie w sytuacjach, w których wyjście jest nadal trudne i kosztowne, takich jak systemy wbudowane lub protokoły sieciowe. HTTP nadal używa numerycznych kodów odpowiedzi, ponieważ są one wyjątkowo łatwe do efektywnego parsowania - w niektórych sytuacjach odczyt tylko pierwszej cyfry może powiedzieć ci już wystarczająco dużo, a ty możesz odrzucić resztę pakietu.
źródło
Powinieneś sprawdzić, w jaki sposób kody błędów / statusu są zorganizowane we wspólnych protokołach, takich jak HTTP . Zastrzegają różne zakresy dla różnych typów statusów / błędów. Ułatwia to zarówno użytkownikom identyfikację nieznanego kodu stanu, jak i programistom przypisanie kodu dla nowego rodzaju błędu, który nie był wcześniej obsługiwany.
źródło
Niestety, po co w ogóle używać kodów błędów?
Złap wyjątek, zaloguj go i zaoferuj wysłanie raportu, jeśli program nie może odzyskać .
(Zakładając, że Twój język obsługuje wyjątki).
Jedyną istotną informacją, która może pomóc w naprawieniu błędu, jest ślad stosu, którego nie otrzymujesz z kodem błędu. (Zakładam również, że chcesz używać kodów błędów do raportów błędów i nie rzucać ich w twarz użytkownika).
źródło
Przyjmuję kontekst proceduralny (C). Jeśli masz obiekty, obiekt błędu jest zwykle lepszy, niezależnie od tego, czy jest to wyjątek, czy nie.
Powinieneś używać kodów błędów lokalnych dla każdego modułu. W przypadku biblioteki możesz mieć specjalny nagłówek zawierający kody błędów, z numerami 1, 2 itd. (Lub -1, -2, jeśli wolisz). Zawsze zwracaj jeden z tych kodów, np. Przetłumacz
errno
na własne kody. Jeśli masz wiele warstw modułów, tłumacz na każdym kroku (lub wstępnie zdefiniuj zakres dla głębszego błędu, np. Wartości 1001–1050 pochodzą z tego drugiego modułu).Ważne jest również, aby zapewnić środki do tłumaczenia kodu na ciąg znaków. Nigdy nie powinieneś zgłaszać tylko kodu, który prowadzi tylko do frustracji. Właściwie każdy kod w twojej aplikacji powinien być wyposażony w funkcję tłumaczenia łańcucha. Na przykład libc zwykle ma
strerror
istrsignal
, ale niestety brakujestrwaitstatus
.źródło