Сколько работы должен выполнить конструктор для класса 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?