Rozmawiam z moim współpracownikiem o tym, ile pracy może wykonać konstruktor. Mam klasę B, która wewnętrznie wymaga innego obiektu A. Obiekt A jest jednym z niewielu elementów, których klasa B potrzebuje do wykonania swojej pracy. Wszystkie jego publiczne metody zależą od wewnętrznego obiektu A. Informacje o obiekcie A są przechowywane w bazie danych, więc próbuję sprawdzić i uzyskać je, sprawdzając je w bazie danych w konstruktorze. Mój współpracownik zwrócił uwagę, że konstruktor nie powinien wykonywać dużo pracy poza przechwytywaniem parametrów konstruktora. Ponieważ wszystkie publiczne metody i tak zawiodłyby, gdyby obiekt A nie został znaleziony przy użyciu danych wejściowych do konstruktora, argumentowałem, że zamiast zezwalać na utworzenie instancji i późniejsze niepowodzenie, w rzeczywistości lepiej jest rzucić ją wcześniej w konstruktorze.
Co myślą inni? Używam C #, jeśli to robi jakąkolwiek różnicę.
Czytanie Czy jest jakiś powód, aby wykonywać całą pracę obiektu w konstruktorze? zastanawiam się, czy pobranie obiektu A przez przejście do bazy danych jest częścią „każdej innej inicjalizacji niezbędnej do przygotowania obiektu do użycia”, ponieważ jeśli użytkownik przekaże konstruktorowi nieprawidłowe wartości, nie byłbym w stanie użyć żadnej z jego publicznych metod.
Konstruktory powinny utworzyć instancję pól obiektu i wykonać dowolną inną inicjalizację niezbędną do przygotowania obiektu do użycia. Ogólnie oznacza to, że konstruktory są małe, ale istnieją scenariusze, w których byłoby to znaczną ilość pracy.