Ваша стратегия зависит от того, как ваше приложение построено сегодня.Если вы используете синглтоны чрезмерно или какой-то другой фреймворк.Я сделал много портирования приложений без фреймворка на что-то вроде Spring или Guice.Это непростая задача, и насколько вы успешны в этом, во многом зависит от того, сколько кода, сколько человек в вашей команде и насколько хорошо команда принимает новые способы построения приложения.Если у вас нет вступительных взносов от вашей команды, я бы начал там, прежде чем пытаться ее кодировать.Убедите людей в своем видении приложения, ответьте на их вопросы, позвольте им немного задуматься и приветствуйте их вклад.Если у них есть большие проблемы, позвольте им озвучить их, и если у вас нет решения, подтвердите его, вернитесь и разработайте его, а затем представьте его.Повторяйте это, пока у вас все на борту.
Теперь портируем код.Это зависит от типа приложения, которое у вас есть: веб-приложение, рабочий стол и т. Д. Но, как правило, когда я портирую этот материал, я создаю пустой проект и настраиваю его так, как вы разработали его с вашей командой.Затем начните тянуть долгоживущие объекты в контейнер.Синглтоны - хорошие места для начала, потому что они обычно живут все время приложения.Начните создавать их в контейнере вместо их методов getInstance ().Возможно, вам придется сломать шаблон синглтона и выставить их конструкторы, но в конце концов вы захотите избавиться от синглетонов.Вы можете сохранить статический реф.Когда вы перетаскиваете объекты поверх их рефакторинга от использования getInstance () к использованию ссылки, которую они дают через переменную экземпляра / getter / setter.
Постепенно вы сможете достичь точки, где вы сможете выполнитьприложение из контейнера Guice.Возможно, вы только что перенесли часть приложения на данный момент.Продолжайте портировать порции по очереди и тестировать их в контейнере.На данный момент у вас достаточно базы, вы можете заручиться поддержкой других членов команды.В конце концов, у вас будет целое портированное приложение, и теперь вы можете приступить к его рефакторингу, чтобы работать в стиле Guice.Вернитесь и устраните ваши статические ссылки и вызовы getInstance (), где вы можете.
Я всегда находил настройку скелета и портирование, а не рефакторинг на месте, чтобы быть гораздо более эффективным способом обработки этих типовконверсий.Вызывать всеобщую остановку на новой работе также очень важно, и в конечном итоге это избавит вас от душевных страданий.Я пытался не останавливать новую работу, и эти типы преобразований могут затянуться во многих выпусках, потому что команда продолжает новый код устаревшим способом.Иногда запуск после новой версии в период затишья до начала реальной работы над следующей версией может дать вам дополнительный импульс, чтобы вы могли добраться до точки, где другие участники могут помочь вам портировать, потому что у вас есть скелет.
Помни об управлении тоже.Если они требуют только новых функций, вам будет сложно контролировать команду.Если они не поддержат ваши усилия, им будет очень трудно закончить.