Sto discutendo con il mio collega su quanto lavoro può fare un costruttore. Ho una classe, B che richiede internamente un altro oggetto A. L'oggetto A è uno dei pochi membri che la classe B deve fare il suo lavoro. Tutti i suoi metodi pubblici dipendono dall'oggetto interno A. Le informazioni sull'oggetto A sono memorizzate nel DB, quindi cerco di convalidarlo e ottenerlo esaminandolo sul DB nel costruttore. Il mio collega ha sottolineato che il costruttore non dovrebbe fare molto lavoro se non quello di acquisire i parametri del costruttore. Poiché tutti i metodi pubblici fallirebbero comunque se l'oggetto A non viene trovato usando gli input per il costruttore, ho sostenuto che invece di consentire a un'istanza di essere creata e successivamente fallire, in realtà è meglio lanciare presto il costruttore. Non tutte le classi lo fanno, ma ho scoperto che il costruttore StreamWriter genera anche se ha problemi ad aprire un file e non ritarda la convalida fino alla prima chiamata a Write.
Cosa pensano gli altri? Sto usando C # se questo fa alcuna differenza.
Lettura C'è mai un motivo per fare tutto il lavoro di un oggetto in un costruttore? mi chiedo se il recupero dell'oggetto A andando a DB sia parte di" qualsiasi altra inizializzazione necessaria per rendere l'oggetto pronto per l'uso "perché se l'utente ha superato con valori errati per il costruttore, non sarei in grado di utilizzare nessuno dei suoi metodi pubblici.
Constructors should instantiate the fields of an object and do any other initialization necessary to make the object ready to use. This is generally means constructors are small, but there are scenarios where this would be a substantial amount of work.