Сколько работы должен выполнить конструктор для класса HTML-парсинга?

Сколько работы целесообразно выполнить конструктору объектов? Должен ли он просто инициализировать поля, а не выполнять какие-либо операции с данными, или это нормально, если он выполняет какой-то анализ?

Background: Я писал класс, который отвечает за анализ HTML-страницы и возвращает различную информацию на основе проанализированной информации. Дизайн класса таков, что класс & apos; Конструктор выполняет синтаксический анализ, выдавая исключение в случае возникновения ошибки. Как только экземпляр инициализирован, проанализированные значения доступны без дальнейшей обработки через средства доступа. Что-то вроде:

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; }
}

После проектирования класса я начал задаваться вопросом, была ли это правильная практика ОО. Должен ли код синтаксического анализа быть помещен вvoid parseHtml() метод и методы доступа возвращают допустимые значения только после вызова этого метода? Мне кажется, что моя реализация верна, но я не могу помочь, но чувствую, что некоторые пуристы ОО могут по какой-то причине счесть ее неправильной и что такая реализация, как следующая, будет лучше:

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; }
}

Существуют ли случаи, когда код инициализации, такой как синтаксический анализ информации, не должен встречаться в конструкторе, или я просто глупый и сам догадываюсь?

Каковы преимущества / недостатки разделения синтаксического анализа от конструктора?

Мысли? Insights?

Ответы на вопрос(19)

Ваш ответ на вопрос