Наша команда получила устаревшую систему для дальнейшего обслуживания и развития. Поскольку это настоящий «унаследованный» материал, действительно существует действительно небольшое количество тестов, и большинство из них - дерьмо. Это приложение с веб-интерфейсом, поэтому есть и управляемые контейнером компоненты, а также простые классы Java (не привязанные к какой-либо структуре и т. Д.), Которые являются «новыми» здесь и там, когда захотите.Как восстановить из старого материала в большой системе шаг за шагом?
Поскольку мы работаем с этой системой, каждый раз, когда мы касаемся данной части, мы пытаемся разбить все эти вещи на более мелкие части, обнаруживать и рефакторировать зависимости, нажимать зависимости, а не вытягивать их в код.
Мой вопрос заключается в том, как работать с такой системой, нарушать dependecies, делать код более проверяемым и т. Д.? Когда останавливаться и как бороться с этим?
Позвольте мне показать вам пример:
public class BillingSettingsAction {
private TelSystemConfigurator configurator;
private OperatorIdDao dao;
public BillingSettingsAction(String zoneId) {
configurator = TelSystemConfiguratorFactory.instance().getConfigurator(zoneId);
dao = IdDaoFactory.getDao();
...
}
// methods using configurator and dao
}
Этот конструктор, безусловно, делает слишком много. Кроме того, чтобы проверить это для дальнейшего рефакторинга это требует делать магию PowerMock и т.д. То, что я хотел бы сделать, чтобы изменить его на:
public BillingSettingsAction(String zone, TelSystemConfigurator configurator, OperatorIdDao dao) {
this.configurator = configurator;
this.dao = dao;
this.zone = zone;
}
или обеспечивают зону настройки конструктора только сеттеры для зависимостей.
Проблема, которую я вижу, заключается в том, что если я предоставляю зависимости в конструкторе, мне все равно нужно предоставить их где-нибудь. Так что это просто проблема на одном уровне. Я знаю, что я могу создать фабрику для подключения всех зависимостей, но прикосновение к другой части приложения приведет к тому, что у каждого будут разные фабрики. Я, очевидно, не могу реорганизовать все приложение сразу и ввести, например. Весна там.
Отображающие сеттеры (возможно, с реализацией по умолчанию) аналогичны, более того, это похоже на добавление кода только для тестов.
Итак, мой вопрос в том, как с этим вы справляетесь? Как сделать зависимости между объектами лучше, более читабельными, проверяемыми, не делая этого за один раз?
Да. Это то, что мы начали делать в некоторых случаях. Кажется, все в порядке, и я рад видеть, что так выбирают и другие. Спасибо за ваш вклад здесь. – grafthez