• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czy takie używanie wyjątków ma sens?

Aruba Cloud - Virtual Private Server VPS
0 głosów
296 wizyt
pytanie zadane 3 grudnia 2020 w PHP przez CSSoup Mądrala (6,460 p.)

Mam następujące pytanie: Czy takie użycie wyjątków jest poprawne, chodzi mi bardziej o fakt tego czy jest to zgodne z dobrymi praktykami? W poniższym przykładzie używam ich do walidacji pól formularza, ale wiem też że mógłbym to rozwiązać w inny sposób.

switch (true) {
      case $this->isEmpty([$uid, $pwd]):
        throw new FormException('Pozostawiono puste pola.');
        break;
      case !$this->userExist($uid);
        throw new UserException('Użytkownik nie został znaleziony.');
        break;
      case !$this->checkPwd($uid, $pwd):
        throw new UserException('Podano błędne hasło');
        break;
    }

4 odpowiedzi

+1 głos
odpowiedź 5 grudnia 2020 przez Ehlert Ekspert (214,940 p.)
wybrane 5 grudnia 2020 przez CSSoup
 
Najlepsza

Kilka rzeczy ode mnie. 

Rzucanie wyjątków w switchu nie jest błędem. Break jest tam nie potrzeby. Pomijam również kwestię, że wygląda to nieczytelnie i drabinka ifów załatwiłaby sprawę. 

Kolejny temat to pomysł korzystania z wyjątków. Moim zdaniem problem walidacji wcale nie wymaga rzucania wyjątków w ramach poinformowania czy dane są poprawne. Oczywiście mówię tutaj o kodzie samej walidacji, która jest de facto czymś całkowicie odrębnym od miejsca, w którym z niej korzystamy.

PS. Nazwij proszę tą metodę po prostu checkPassword.

+1 głos
odpowiedź 3 grudnia 2020 przez Wiciorny Ekspert (280,450 p.)
rzucanie wyjątków w switch/case nie jest poprwane, tzn stosować tak możesz ale dobrą praktyką to nie jest, bo switch/case nie służy do obsługi czegoś takiego.
Swoją drogą jak już masz 2 błędy które, wyrzucają tę samą klasę, można by to sformalizować w jedną rzecz zależną od zmiennych
1
komentarz 4 grudnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

rzucanie wyjątków w switch/case nie jest poprwane, tzn stosować tak możesz ale dobrą praktyką to nie jest, bo switch/case nie służy do obsługi czegoś takiego.

Możesz podać źródło, które określa to jako złą praktykę? Pytam z ciekawości, bo switch jest instrukcją sterującą, więc dlaczego by za jej pomocą nie wykryć przypadku do rzucenia wyjątku? 

+1 głos
odpowiedź 4 grudnia 2020 przez Assasz Nałogowiec (30,460 p.)
edycja 4 grudnia 2020 przez Assasz

Według mnie samo użycie switcha jest spoko, jednak miałbym uwagę do klas wyjątków. Mianowicie najlepszą praktyką jest dostarczanie dedykowanego wyjątku dla każdego use case'a, tj.:

throw UserException::notFound();

throw UserException::invalidCredentials();

// lub

throw new UserNotFoundException();

throw new InvalidUserCredentialsException();

W ten sposób nie musisz ustawiać komunikatu, ponieważ każdy wyjątek ma taki komunikat predefiniowany.

Btw po instrukcji throw nie musisz robić break :)

+1 głos
odpowiedź 4 grudnia 2020 przez Benek Szeryf (93,070 p.)
Według mnie powinieneś tutaj użyć walidatora. Rzucanie wyjątkami przerywa działanie programu. To raczej nie jest wskazane w przypadku niepowodzenia logowania. Chyba że zapewniasz obsługę takich zdarzeń. Mimo wszystko to i tak jest zła praktyka i wygląda jak niezły work-around, bo wyjątek oznacza sytuację wyjątkową, w zasadzie niespodziewaną w działaniu programu, a nie w zachowaniu użytkownika. Zwykle programy są bardziej deterministyczne niż zachowanie użytkowników portalu ;)

Podobne pytania

0 głosów
1 odpowiedź 231 wizyt
pytanie zadane 30 kwietnia 2020 w JavaScript przez Greeenone Pasjonat (16,100 p.)
0 głosów
1 odpowiedź 150 wizyt
pytanie zadane 12 lipca 2020 w PHP przez Greeenone Pasjonat (16,100 p.)
0 głosów
1 odpowiedź 1,663 wizyt
pytanie zadane 20 lipca 2018 w PHP przez dobre.rece Nowicjusz (200 p.)

93,327 zapytań

142,325 odpowiedzi

322,396 komentarzy

62,657 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...