Czy dobrą praktyką jest używanie wyjątków i rzucanie / łapanie wyjątków zamiast zwracania 0 lub 1 z funkcji, a następnie używanie if / else do obsługi błędów. Dzięki temu łatwiej jest poinformować użytkownika o problemie.
Nie nie nie!
Nie mieszaj wyjątków i błędów. Wyjątki są, cóż, wyjątkowe. Błędy nie są. Gdy poprosisz użytkownika o podanie ilości produktu, a użytkownik wpisze „cześć”, oznacza to błąd. To nie jest wyjątek: nie ma nic wyjątkowego w widzeniu nieprawidłowych danych wejściowych od użytkownika. Dlaczego nie możesz używać wyjątków w wyjątkowych przypadkach, na przykład podczas sprawdzania poprawności danych wejściowych? Inne osoby już to wyjaśniły i pokazały prawidłową alternatywę dla sprawdzania poprawności danych wejściowych.
Oznacza to również, że użytkownik nie dba o twoje wyjątki , a pokazanie wyjątków jest zarówno nieprzyjazne, jak i niebezpieczne . Na przykład wyjątek podczas wykonywania zapytania SQL często ujawnia samo zapytanie. Czy na pewno chcesz zaryzykować przedstawienie takiej wiadomości wszystkim?
więcej niż jedna rzecz może się nie udać, na przykład problem z bazą danych, zduplikowany wpis, problem z serwerem itp. Gdy problem wystąpi podczas rejestracji, użytkownik musi o tym wiedzieć.
Źle. Jako użytkownik nie muszę znać problemów z bazą danych, zduplikowanych wpisów itp. Naprawdę nie dbam o twoje problemy. Co mam zrobić, trzeba wiedzieć, że wszedłem nazwę użytkownika, który już istnieje. Jak już powiedziano, nieprawidłowe dane wejściowe ode mnie muszą powodować błąd, a nie wyjątek.
Jak wyprowadzić te błędy? To zależy od kontekstu. W przypadku już używanej nazwy użytkownika chciałbym zobaczyć małą czerwoną flagę pojawiającą się w pobliżu nazwy użytkownika, nawet przed przesłaniem formularza z informacją, że nazwa użytkownika jest już używana. Bez JavaScript ta sama flaga musi pojawić się po przesłaniu.
W przypadku innych błędów wyświetlisz całą stronę z błędem lub wybierz inny sposób poinformowania użytkownika, że coś poszło nie tak (na przykład komunikat, który się pojawi, a następnie zniknie u góry strony). Pytanie dotyczy zatem bardziej wrażeń użytkownika niż programowania.
Z punktu widzenia programistów, w zależności od rodzaju błędu, będziesz go propagował na różne sposoby. Na przykład w przypadku już podanej nazwy użytkownika żądanie AJAX http://example.com/?ajax=1&user-exists=John
zwróci obiekt JSON wskazujący:
- Że użytkownik już istnieje,
- Komunikat o błędzie do wyświetlenia użytkownikowi.
Drugi punkt jest ważny: chcesz mieć pewność, że ten sam komunikat pojawi się zarówno podczas przesyłania formularza z wyłączoną obsługą JavaScript, jak i wpisywania zduplikowanej nazwy użytkownika z włączoną obsługą JavaScript. Nie chcesz powielać tekstu komunikatu o błędzie w kodzie źródłowym po stronie serwera i w JavaScript!
Jest to właściwie technika stosowana przez strony Stack Exhange. Na przykład, jeśli próbuję głosować własną odpowiedź, odpowiedź AJAX zawiera błąd do wyświetlenia:
{"Success":false,"Warning":false,"NewScore":0,"Message":"You can't vote for your own post.",
"Refresh":false}
Możesz także wybrać inne podejście i wstępnie ustawić błędy na stronie HTML przed wypełnieniem formularza. Plusy: nie musisz wysyłać komunikatu o błędzie w odpowiedzi AJAX. Minusy: co z dostępnością? Spróbuj przeglądać stronę bez CSS, a zobaczysz wszystkie możliwe błędy.