На днях начал плотное изучение книги Мартина Фаулера "Рефакторинг: улучшение существующего кода"
В самой первой главе этой замечательной книги приводится интересный пример, с помощью которого, автор и показывает нам как правильно проводить рефакторинг.
Банально, но для закрепления теории нет ничего лучше практики. Вот так и родилась идея завести маленький проект в IntelliJ IDEA и попробовать там проделать то же самое. Ну и грех не поделится, может кому-нибудь будет полезен этот код.
VCS: Mercurial
Repository URL: https://code.google.com/p/fowler-book-chapter1/
Небольшие изменения, которые привнес я (отличия от книги):
- Самое главное - написал тесты, которые в книге упоминаются, но не приводятся (сделал на JUnit4).
- В последних коммитах (а их всего девять) я заменил авторскую конкатенацию строк для формирования отчёта на более удобный метод String.format()
- Немного другая разметка HTML-версии отчёта (авторская показалась какой-то убогой)
Загрузить проект в отличную от IntelliJ IDEA среду, я думаю, сможете без проблем. Тесты лежат в отдельном пакете "Tests".
На текущий момент последняя ревизия — с подписью "Шаг 7 (заключительный в книге). Замена switch полиморфизмом. Создание класса Price с потомками."
Правда и более ранние коммиты тоже имеют значения - благодаря им можно отследить всю историю правок, шаг за шагом.
P.S. Хочу в дальнейшем преобразовать этот код в подобие боевого - чтобы было все правильно прокомментировано, были всевозможные проверки на входные значения аргументов методов и т.п.