Ich diskutiere mit meinem Kollegen darüber, wie viel Arbeit ein Konstrukteur leisten kann. Ich habe eine Klasse B, die intern ein anderes Objekt A erfordert. Objekt A ist eines von wenigen Mitgliedern, die Klasse B für ihre Arbeit benötigt. Alle öffentlichen Methoden hängen vom internen Objekt A ab. Informationen zu Objekt A werden in der Datenbank gespeichert. Daher versuche ich, sie zu überprüfen und abzurufen, indem ich sie in der Datenbank im Konstruktor nachschaue. Mein Mitarbeiter wies darauf hin, dass der Konstruktor nur die Konstruktorparameter erfassen sollte. Da alle öffentlichen Methoden ohnehin fehlschlagen würden, wenn Objekt A nicht mit den Eingaben für den Konstruktor gefunden wird, habe ich argumentiert, dass es besser ist, eine Instanz früh im Konstruktor auszulösen, anstatt zuzulassen, dass sie erstellt und später fehlschlägt.
Was denken andere? Ich verwende C #, wenn das einen Unterschied macht.
Lesen Gibt es jemals einen Grund, die gesamte Arbeit eines Objekts in einem Konstruktor zu erledigen? Ich frage mich, ob das Abrufen von Objekt A durch Aufrufen von DB Teil der "sonstigen Initialisierung, die erforderlich ist, um das Objekt einsatzbereit zu machen" ist. Wenn der Benutzer falsche Werte an den Konstruktor übergibt, kann ich keine seiner öffentlichen Methoden verwenden.
Konstruktoren sollten die Felder eines Objekts instanziieren und alle anderen Initialisierungen vornehmen, die erforderlich sind, um das Objekt einsatzbereit zu machen. Dies bedeutet im Allgemeinen, dass Konstruktoren klein sind, aber es gibt Szenarien, in denen dies einen erheblichen Arbeitsaufwand bedeuten würde.