Есть ли проблемы с выполнением основной работы класса в его конструкторе?

я всегда чувствовал, что в целом основная работа класса должна выполняться в его методах экземпляра, в то время как конструктор должен только привести экземпляр в пригодное для использования начальное состояние.

Но Я считаю, что на практике бывают ситуации, когда кажется более разумным поместить практически всю фактическую работу в конструктор.

Один пример: Мне нужно получить из базы данных некоторую информацию, относящуюся к СУБД. Мне показалось, что наиболее естественным способом было создать класс DBMSSpecInfo с конструктором:

public DBMSSpecInfo(java.sql.Connection conn) throws SQLException{
  // ... retrieve info from DBMS
}

/** @returns max size of table in kiB */
public int getMaxTableSize() {//...}

/** @returns max size of index in kiB */
public int getMaxIndexSize() {//...}

/** @returns name of default schema */
public String getDefaultSchema() {//...}

Вы должны создать класс один раз, конструктор будет извлекать все данные, а затем вы можете использовать различные геттеры для извлечения необходимой информации.

Конечно, я мог бы поместить этот метод в другое место и использовать только DBMSSpecInfo для возвращаемого значения (по сути, используя DBMSSpecInfo только в качестве держателя значения), но кажется уродливым создавать класс только для возврата значений из одного функция

Так что ты думаешь? Есть ли проблемы с выполнением основной работы в конструкторе? Это "неидиоматично" в Яве? Или это приемлемая (хотя, возможно, редкая) практика?

12
задан sleske 29 September 2010 в 10:36
поделиться