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

Wyjątek w konstruktorze-można?

Object Storage Arubacloud
0 głosów
389 wizyt
pytanie zadane 11 października 2019 w C# przez JakSky Stary wyjadacz (14,770 p.)

Czy można rzucać wyjątek w konstruktorze?

Np tworzymy nowy obiekt:

var anyCar = new Car(1990);

Ale samochód nie może być wyprodukowany przed 2000 rokiem.

Teoretycznie tak bym widział konstruktor...

class Car
{
int year;
public Car(int year)
{
if(year>=2000)
{
this.year = year;
}
}
}

Czy można dodać else i w nim wyjątek?

 

komentarz 11 października 2019 przez adrian17 Ekspert (344,860 p.)
(a próbowałeś?)
komentarz 11 października 2019 przez JakSky Stary wyjadacz (14,770 p.)
Technicznie się da. Bardziej chodzi mi o dobre praktyki. Czy tak powinno się robić....

3 odpowiedzi

+1 głos
odpowiedź 11 października 2019 przez Ehlert Ekspert (212,670 p.)

Nie wiem jak w C# techniczne ale jak najbardziej rozpatrywałbym takie rozwiązanie. Warto tam rzucić jakiś wyjątek domenowy, jasno sygnujący problem. Takie rozwiązanie gwarantuje Ci że nie zostanie nigdy stworzony obiekt domenowy z błędnymi logicznie danymi.

Oczywiście jest to podejście safe to fail. Oznacza to w skrócie że Twój system(najprawdopodobniej warstwa walidacji) nie może dopuścić do podania błędnego argumentu.

komentarz 11 października 2019 przez JakSky Stary wyjadacz (14,770 p.)

Dzięki za odpowiedź.

Takie rozwiązanie gwarantuje Ci że nie zostanie nigdy stworzony obiekt domenowy z błędnymi logicznie danymi.

Na tym mi właśnie zależy...

Warto też zobaczyć ten temat:

https://stackoverflow.com/questions/77639/when-is-it-right-for-a-constructor-to-throw-an-exception

+1 głos
odpowiedź 11 października 2019 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
Oczywiście, że można natomiast, myślałeś o zaimplementowaniu fabryki?.  Jeśli natomiast będziesz przyjmować w konstruktorze więcej niż 3-4 parametry możesz pomyśleć o wzorcu buildera aby walidować wprowadzane wartości.
+1 głos
odpowiedź 15 października 2019 przez Crash182 Gaduła (3,600 p.)
Oczywiscie że można, dzięki konstruktorom możesz wymusić na programiscie jakieś wartości startowe i jakoś wypadałoby to zwalidowac. Jak wiadomo konstruktor nie zwraca żadnych wartości więc wyjątek jak najbardziej tu się przyda. Oczywiście można bawić się w fabryki, zależy o jakiej skali projekcie mówimy. Ja osobiście  często korzystam z wyjątków, szczególnie w warstwie domenowej, używam custom exceptions, które loguje a później filtruje w moich api na np bad request. Pozdrawiam

Podobne pytania

0 głosów
6 odpowiedzi 261 wizyt
pytanie zadane 23 marca 2016 w C# przez Vento Pasjonat (17,120 p.)
0 głosów
3 odpowiedzi 228 wizyt
0 głosów
1 odpowiedź 207 wizyt
pytanie zadane 14 kwietnia 2020 w C i C++ przez nanautzin Obywatel (1,510 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...