• 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?

VPS Starter Arubacloud
0 głosów
416 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 (349,240 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 (213,860 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 297 wizyt
pytanie zadane 23 marca 2016 w C# przez Vento Pasjonat (17,120 p.)
0 głosów
3 odpowiedzi 244 wizyt
0 głosów
1 odpowiedź 227 wizyt
pytanie zadane 14 kwietnia 2020 w C i C++ przez nanautzin Obywatel (1,510 p.)

92,960 zapytań

141,922 odpowiedzi

321,156 komentarzy

62,295 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 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...