Prostszym rozwiązaniem byłoby użycie exceptions.
Po wystąpieniu błędu, który może być wyświetlany użytkownikowi, należy podać specjalny wyjątek - być może o nazwie UserError
. Wyjątek powinien zawierać tekst komunikatu o błędzie podczas rzucania. Tego rodzaju błędy są cechy które dostarczają użytkownikom przydatnych informacji (tj próbowali usunąć coś, co nie istnieje - co może się zdarzyć, kiedy mają wiele przeglądarek otwarty, etc.)
np
throw new UserError("That object no longer exists.");
Gdy wystąpi błąd, który chcesz ukryć przed użytkownikiem, wyślij inny rodzaj wyjątku o nazwie InternalError
. W takim przypadku należy wykonać log i pozwolić programowi kontynuować, aby określony błąd był ukryty przed użytkownikiem. Jeśli przeszkadza to w działaniu, możesz rzucić ogólny komunikat o błędzie. Będą to błędy i chcesz je naprawić tak szybko, jak to możliwe.
np .:
throw new InternalError("Failed to connect to remote service");
Wszystkie komunikaty o błędach mogą być przechowywane (zakodowane) w źródle, gdzie jest wyjątek. Niekoniecznie jest to zła praktyka projektowa - jeśli używasz narzędzia takiego jak gettext, możesz z łatwością przetłumaczyć wszystkie te wiadomości.
Podoba mi się ten pomysł, jedynym zastrzeżeniem jest, jeśli jest wiele błędów idealnie, chcę zapisać błąd i kontynuować wykonywanie. Stąd dlaczego używałem setError i getError. Sprawdzam, czy zwrot jest prawdą, co oznacza, że wszystkie działania zakończyły się powodzeniem, a jeśli nie, otrzymam błąd. Działanie, które częściowo mi się powiodło, w wyniku czego chciałbym zwrócić wartość false i użyć funkcji getError, aby uzyskać komunikat wskazujący, która część zakończyła się niepowodzeniem. Mam nadzieję, że ma to sens. – Andre