добавить подсказку к существующему приложению - PullRequest
1 голос
/ 23 декабря 2011

Я хочу начать использовать guice в существующем приложении с устаревшим кодом. Есть ли какие-либо указатели и рекомендации BKM о том, как начать это делать? Я нашел один подход здесь , и хотел получить дополнительную информацию и подробности.
Спасибо!

РЕДАКТИРОВАТЬ: еще несколько подробностей о моем приложении: это серверное приложение, которое запускается в домашнем серверном приложении, поэтому графический интерфейс не задействован. В нем много унаследованного кода, и я сомневаюсь, что / как его перенести.

Ответы [ 2 ]

4 голосов
/ 23 декабря 2011

Ваша стратегия зависит от того, как ваше приложение построено сегодня.Если вы используете синглтоны чрезмерно или какой-то другой фреймворк.Я сделал много портирования приложений без фреймворка на что-то вроде Spring или Guice.Это непростая задача, и насколько вы успешны в этом, во многом зависит от того, сколько кода, сколько человек в вашей команде и насколько хорошо команда принимает новые способы построения приложения.Если у вас нет вступительных взносов от вашей команды, я бы начал там, прежде чем пытаться ее кодировать.Убедите людей в своем видении приложения, ответьте на их вопросы, позвольте им немного задуматься и приветствуйте их вклад.Если у них есть большие проблемы, позвольте им озвучить их, и если у вас нет решения, подтвердите его, вернитесь и разработайте его, а затем представьте его.Повторяйте это, пока у вас все на борту.

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

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

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

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

3 голосов
/ 23 декабря 2011

Ожидайте путаницы на некоторое время. Я был в любом случае. Мне нравится видео на домашней странице Guice.

Я думаю, что включение Guice или любой структуры внедрения зависимостей в ваше приложение было точно описано для меня как натяжение нити в свитере и никогда так и не нашлось конца. Я имею в виду, что это может изменить ваш подход в нескольких областях ваших приложений. Например, от сервлетов до jdbc-фреймворков (мы используем mybatis-guice ), до модульных тестов (см. jukito ).

Хороший ресурс Группа пользователей Guice .

Не ожидайте, что сделаете все это сразу. Может потребоваться некоторое время, чтобы полностью освоить способ Guice.

...