Jaki jest preferowany sposób inicjowania klas podczas modelowania klas:
- Konstruktory lub
- Metody fabryczne
A jakie byłyby względy korzystania z jednego z nich?
W niektórych sytuacjach wolę metodę fabryczną, która zwraca null, jeśli obiektu nie można zbudować. To czyni kod porządnym. Mogę po prostu sprawdzić, czy zwrócona wartość nie jest pusta przed podjęciem alternatywnej akcji, w przeciwieństwie do zgłoszenia wyjątku od konstruktora. (Osobiście nie lubię wyjątków)
Powiedzmy, że mam konstruktor klasy, który oczekuje wartości id. Konstruktor używa tej wartości do wypełnienia klasy z bazy danych. W przypadku, gdy rekord o podanym identyfikatorze nie istnieje, konstruktor zgłasza wyjątek RecordNotFoundException. W takim przypadku będę musiał zawrzeć konstrukcję wszystkich takich klas w bloku try..catch.
W przeciwieństwie do tego mogę zastosować statyczną metodę fabryczną na tych klasach, które zwrócą null, jeśli rekord nie zostanie znaleziony.
Które podejście jest lepsze w tym przypadku, w przypadku metody konstruktora lub fabryki?