Хорошие примеры при обучении рефакторингу?
Я запускаю код рефакторинга dojo для некоторых сотрудников, которые задавали вопрос о том, как рефакторинг и модели идут вместе, и мне нужна примерная база кода. Кто-нибудь знает о хорошей отправной точке, которая не является ужасной, они не могут сделать головы или хвосты кода, но могут переписать свой путь к чему-то полезному?
Ответы
Ответ 1
Я бы на самом деле предлагал рефакторинг некоторого кода вашего и вашего коллеги.
Всегда есть места, в которых может быть реорганизована существующая база кода, а знакомство с существующим кодом поможет сделать его более похожим на полезную вещь и менее похоже на упражнение. Найдите что-то в сводном коде компании, чтобы использовать в качестве примера, если это возможно.
Ответ 2
Вот некоторые коды, как оригинальная, так и рефакторинговая версия, поэтому вы можете подготовить свою ката или просто сравнить результаты после выполнения рефакторинга:
Ответ 3
Первая глава в Martin Fowler "Рефакторинг" является хорошей отправной точкой для рефакторинга. Я понял большинство концепций, когда один из моих учителей в школе использовал этот пример.
Ответ 4
Каков общий уровень знаний ваших коллег?
Что-то основное, как дублирование кода, должно быть легко обернуть головы. Два фрагмента (почти) идентичного кода, которые могут быть реорганизованы в метод повторного использования, класс, что угодно. Использование (прошлое) примера из вашей собственной базы кода было бы хорошим.
Ответ 5
"Чистый код: руководство по гибкому программному мастерству Роберта К. Мартина" рассматривает рефакторинг.
Ответ 6
Я бы рекомендовал вам разработать простой пример проекта для конкретного требования.
Затем вы добавляете еще одно требование и вносите изменения в существующие классы. Вы продолжаете делать это и показывать им, как вам трудно сделать каждое изменение, когда код не разработан должным образом. Это сделает их понятными, потому что это то, что эти ppl будут делать в повседневной работе. Заставьте их понять, что, если шаблоны и принципы не выполняются с самого начала, как они будут в конечном итоге в беспорядке в конце.
Когда они это осознают, вы начинаете с нуля или реорганизуете существующий испорченный код. Теперь добавьте требование и заставьте его понять, что легко внести изменения в реорганизованный код, чтобы вам нужно было протестировать только несколько классов. Одно изменение не повлияет на других и т.д.
В качестве примера можно использовать компьютер, клавиатуру и класс принтера. Добавьте такие требования, как, вы будете хотеть, чтобы компьютер читал с мыши, тогда еще одно требование может быть похоже на то, что ваш компьютер захочет сохранить его на жестком диске, чем печать. Наконец, ваш реорганизованный код должен выглядеть так: ваш компьютерный класс должен зависеть от класса абстрактных классов ввода и класса устройства вывода. И ваш класс клавиатуры должен наследовать класс Inputdevice.
Ответ 7
- Рефакторинг - это нефункциональное требование, когда код выполняет правильную функциональность, для которой он разработан, однако его трудно отлаживать, требуется больше усилий для поддержки и узкого места производительности. Рефакторинг должен легко меняться, хорошо читаться и повышать эффективность.
Таким образом, нам нужно сосредоточиться на критериях, чтобы сделать код более удобочитаемым, простым в обслуживании.
- Очевидно, что иметь очень большой метод/функцию может быть трудно понять.
- Класс зависит от других сотен классов, которые делают худшие при отладке.
- Код должен читаться так же, как чтение некоторого рабочего процесса.
Вы также можете использовать инструменты, такие как сонар, которые могут помочь вам определить критические критерии, такие как "Cyclomatic Complexity"
http://www.sonarsource.org/managing-cyclomatic-complexity-to-increase-maintainability/
Вы просите их написать код самостоятельно и проверить, как инструмент выполняет рефакторинг.
Кроме того, вы можете писать код в eclipse, и есть опция, которая делает рефакторинг для вас... ![enter image description here]()
Ответ 8
Он немного устарел (2003), но у IBM есть несколько примеров рефакторинга (которые работают [ed?] в Eclipse) на http://www.ibm.com/developerworks/library/os-ecref/