Czytałem porady dotyczące tego pytania, w jaki sposób należy traktować wyjątek jak najbliżej miejsca, w którym został zgłoszony.
Moim dylematem dotyczącym najlepszej praktyki jest to, czy należy użyć try / catch / wreszcie, aby zwrócić enum (lub liczbę całkowitą reprezentującą wartość, 0 dla błędu, 1 dla ok, 2 dla ostrzeżenia itp., W zależności od przypadku) , aby odpowiedź jest zawsze w porządku, czy też należy pozwolić, aby wyjątek przeszedł, aby część wywołująca sobie z tym poradziła?
Z tego, co mogę zebrać, może się to różnić w zależności od przypadku, więc oryginalna rada wydaje się dziwna.
Na przykład w usłudze sieciowej zawsze chciałbyś oczywiście przywrócić stan, więc każdy wyjątek musi zostać rozwiązany na miejscu, ale powiedzmy, że wewnątrz funkcji wysyłającej / pobierającej dane przez http, chciałbyś wyjątek (na przykład w przypadku 404), aby przejść tylko do tego, który go zwolnił. Jeśli tego nie zrobisz, musisz stworzyć jakiś sposób na poinformowanie strony wywołującej o jakości wyniku (błąd: 404), a także o samym wyniku.
Chociaż można spróbować złapać wyjątek 404 wewnątrz funkcji pomocnika, która pobiera / wysyła dane, prawda? Czy tylko ja używam smallinta do oznaczania stanów w programie (i oczywiście odpowiednio je dokumentuję), a następnie używam tych informacji do celów sprawdzania poprawności poczytalności (wszystko ok / obsługa błędów) na zewnątrz?
Aktualizacja: spodziewałem się fatalnego / nieśmiertelnego wyjątku dla głównej klasyfikacji, ale nie chciałem tego uwzględniać, aby nie przesądzać o odpowiedziach. Pozwól, że wyjaśnię, o co chodzi w tym pytaniu: obsługa zgłoszonych wyjątków, a nie zgłaszanie wyjątków. Jaki jest pożądany efekt: Wykryj błąd i spróbuj go naprawić. Jeśli odzyskanie nie jest możliwe, przekaż najbardziej znaczące informacje zwrotne.
Ponownie, w przykładzie http get / post, pytanie brzmi: czy powinieneś podać nowy obiekt, który opisuje, co się stało z pierwotnym dzwoniącym? Jeśli ten pomocnik był w bibliotece, której używasz, czy spodziewałbyś się, że dostarczy ci kod statusu operacji, czy też umieściłby go w bloku try-catch? Jeśli projektujesz go, czy podasz kod statusu, czy zgłaszasz wyjątek i czy zamiast tego pozwalasz wyższemu poziomowi przetłumaczyć go na kod / wiadomość statusu?
Streszczenie: Jak wybrałeś, jeśli kawałek kodu zamiast generować wyjątek, zwraca kod statusu wraz z wszelkimi wynikami, które może przynieść?