Текущая ситуация, вероятно, заключается в том, что никто не осмеливается что-либо менять в коде, потому что это может привести к непредсказуемым последствиям.Убедитесь, что все понимают, что вы улучшаете ситуацию: ваши изменения могут нарушить код, но в отличие от ранее , эти поломки будут найдены и один раз они были найдены, они будут исправлены навсегда .
Тем не менее, следующий шаг зависит от вашего опыта и вашей репутации в команде.Если вы хотите быть осторожнее, используйте такой код (синтаксис Java):
Mapper {
public static Mapper INSTANCE = new Mapper(); // NEW code
protected void doImpl() { // NEW CODE
... code copied from impl()... // OLD code, NEW PLACE
}
public static void impl() { // OLD code
INSTANCE.doImpl(); // NEW code
}
// OLD code ...
}
Это очень простое изменение, которое позволяет вам перезаписать INSTANCE
из ваших тестов.Для производственного кода вы ничего не делаете, и по умолчанию код будет вести себя точно так же, как и раньше.
Таким образом, вы можете заменять один метод за раз.Вы можете в любой момент прекратить этот путь - каждое изменение занимает всего пару минут, и это рефакторинг: код делает именно то, что делал раньше.Поскольку каждое изменение настолько мало и ничего не может сломать, вы можете заменить один метод, написать все модульные тесты, которые вы не могли написать раньше, промыть, повторить.Наконец, если вы не хотите / не нужно переделывать все статические методы, этот подход предоставляет вам все возможности, о которых вы могли бы просить.
На втором этапе вы можете ввести DI или любую другую технологию, которая сделаетты счастлив.Преимущество этого подхода: когда вы приступаете к сложным изменениям, у вас уже будут модульные тесты, которые защитят вас.
Если вы начали с DI, вам пришлось бы изменить много кода во всехвиды мест - без надлежащих юнит-тестов, которые могли бы вас защитить.