Который является более злым: ненужный одиночный элемент или Объект Бога?

Знаток помогает довольно много с этой проблемой, когда я кодирую Java. Мы передаем pom.xml scs, и репозиторий знатока содержит все наши зависимости. Для меня, который походит на хороший способ сделать это.

6
задан Jason Baker 3 July 2009 в 15:42
поделиться

4 ответа

Я думаю, вы идете по пути разделения на два класса. Возможно, вы захотите рассмотреть возможность использования фабрики для создания контекста / соединения базы данных по мере необходимости. Таким образом, вы можете рассматривать соединение как единицу работы, которая создается / удаляется по мере необходимости, вместо того, чтобы сохранять одно соединение на протяжении всего срока службы объекта. Однако YMMV.

Что касается конфигурации, это один из случаев, когда я считаю, что синглтон может быть правильным выбором. Я бы не стал сбрасывать его только потому, что его сложно тестировать. Тем не менее, вы можете подумать о его создании для реализации интерфейса. Затем вы можете использовать внедрение зависимостей, чтобы предоставить имитацию интерфейса во время тестирования. Ваш производственный код будет построен либо для использования экземпляра синглтона, если введенное значение равно нулю, либо для внедрения экземпляра синглтона. В качестве альтернативы вы можете создать класс, чтобы разрешить повторную инициализацию с помощью частного метода, и вызвать его в своих тестовых методах настройки / разрыва, чтобы убедиться, что он имеет правильную конфигурацию для ваших тестов. Я предпочитаю первую реализацию последней, хотя я также использовал ее, когда у меня нет прямого контроля над интерфейсом.

Постепенное внесение изменений - определенно лучший способ. Если возможно, объединить текущую функциональность с тестами и убедиться, что эти тесты все еще проходят после ваших модификаций (хотя, конечно, не те, которые имеют непосредственное отношение к вашим модификациям), это хороший способ убедиться, что вы не нарушаете другой код. .

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

Постепенное внесение изменений - определенно лучший способ. Если возможно, объединить текущую функциональность с тестами и убедиться, что эти тесты все еще проходят после ваших модификаций (хотя, конечно, не те, которые имеют непосредственное отношение к вашим модификациям), это хороший способ убедиться, что вы не нарушаете другой код. .

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

Постепенное внесение изменений - определенно лучший способ. Если возможно, объединить текущую функциональность с тестами и убедиться, что эти тесты все еще проходят после ваших модификаций (хотя, конечно, не те, которые имеют непосредственное отношение к вашим модификациям), это хороший способ убедиться, что вы не нарушаете другой код. .

Постепенное внесение изменений - определенно правильный путь. Если возможно, объединить текущую функциональность с тестами и убедиться, что эти тесты все еще проходят после ваших модификаций (хотя, конечно, не те, которые имеют непосредственное отношение к вашим модификациям) - хороший способ убедиться, что вы не нарушаете другой код. .

Постепенное внесение изменений - определенно правильный путь. Если возможно, объединить текущую функциональность с тестами и убедиться, что эти тесты все еще проходят после ваших модификаций (хотя, конечно, не те, которые имеют непосредственное отношение к вашим модификациям), это хороший способ убедиться, что вы не нарушаете другой код. .

5
ответ дан 8 December 2019 в 17:26
поделиться

Трудно узнать, не видя вашего кода, но почему бы не сделать то, что вы говорите, - сделать это постепенно? Сначала выполните шаг 1, разделите базу данных.

Если это быстро, вернитесь назад, и теперь у вас есть только 1 объект меньшего размера, чтобы перестать быть синглтоном, а не 2. Так что шаг 2 должен быть быстрее. Или на этом этапе вы можете увидеть какой-то другой код, который можно реорганизовать из синглтона.

Надеюсь, вы сможете постепенно уменьшать то, что находится в синглтоне, до тех пор, пока оно не исчезнет, ​​не платя огромных временных затрат ни на кого. step.

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

5
ответ дан 8 December 2019 в 17:26
поделиться

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

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

2
ответ дан 8 December 2019 в 17:26
поделиться

Форматировать строку

MessageFormat - заключить выделение в MessageFormat.

 ${:import(java.text.MessageFormat)} 
 MessageFormat.format(${word_selection}, ${cursor})

Это позволяет мне переместить курсор на строку, расширить выделение на всю строку (Shift-Alt- Вверх), затем дважды нажмите Ctrl-Пробел.

Заблокировать выделение

блокировать - заключить выделенные строки в заключительную блокировку. Предположим наличие переменной блокировки.

${lock}.acquire();
try {
    ${line_selection}
    ${cursor}
} finally {
    ${lock}.release();
}

NB $ {line_selection} шаблоны отображаются в меню Окружить с помощью (Alt-Shift-Z).

Теперь вы можете преобразовать классы по одному, чтобы принять объект конфигурации через их конструкторы, чтобы завершить этап 2. Все, на что у вас нет времени, может использовать синглтон-оболочку. После того, как вы переместите их повсюду, вы можете избавиться от оболочки.

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

2
ответ дан 8 December 2019 в 17:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: