How much work should the constructor for an HTML parsing class do?

Wie viel Arbeit ist für einen Objektkonstruktor sinnvoll? Sollte es einfach Felder initialisieren und keine Operationen an Daten durchführen, oder ist es in Ordnung, dass es eine Analyse durchführt?

Hintergrund: Ich habe eine Klasse geschrieben, die für das Parsen einer HTML-Seite und das Zurückgeben verschiedener Informationen basierend auf den analysierten Informationen verantwortlich ist. Das Design der Klasse ist so, dass der Konstruktor der Klasse das Parsen ausführt und eine Ausnahme auslöst, wenn ein Fehler auftritt. Sobald die Instanz initialisiert ist, stehen die analysierten Werte ohne weitere Verarbeitung über Accessoren zur Verfügung. So etwas wie:

public class Parser {

    public Parser(final String html) throws ParsingException {
        /* Parsing logic that sets private fields */
        /* that throws an error if something is erroneous.*/
    }

    public int getNumOfWhatevers() { return private field; }
    public String getOtherValue()  { return other private field; }
}

Nachdem ich die Klasse entworfen hatte, fragte ich mich, ob dies die richtige OO-Praxis war. Sollte der Parsing-Code innerhalb von a stehen?void parseHtml() Methode und die Accessoren geben erst dann gültige Werte zurück, wenn diese Methode aufgerufen wird? Ich habe das Gefühl, dass meine Implementierung korrekt ist, aber ich kann nicht anders, als zu glauben, dass einige OO-Puristen sie aus irgendeinem Grund falsch finden und dass eine Implementierung wie die folgende besser wäre:

public class Parser {

    public Parser(final String html) {
        /* Remember html for later parsing. */
    }

    public void parseHtml() throws ParsingException { 
        /* Parsing logic that sets private fields */
        /* that throws an error if something is erroneous.*/
    }

    public int getNumOfWhatevers() { return private field; }
    public String getOtherValue()  { return other private field; }
}

Gibt es Fälle, in denen der Initialisierungscode, z. B. das Analysieren von Informationen, nicht im Konstruktor vorkommen sollte, oder bin ich nur dumm und rate selbst nach?

Was sind die Vor- / Nachteile der Aufteilung des Parsings vom Konstruktor?

Gedanken? Einsichten?

Antworten auf die Frage(19)

Ihre Antwort auf die Frage