Я знаком с рефакторингом довольно больших базовых кодов в С# и Java, но Clojure - это что-то вроде другого зверя, тем более что он:
- Имеет ли сочетание макросов и функций в типичном коде (т.е. вы можете захотеть реорганизовать макрос в функцию или наоборот?)
- Использует динамическую типизацию в большинстве случаев (поэтому вы не можете проверять время компиляции корректности вашего реорганизованного кода).
- Функциональный, а не объектно-ориентированный стиль
- Не хватает поддержки для рефакторинга в текущих IDE
- Менее толерантен к циклическим зависимостям в базовых кодах (затрудняет перемещение блоков кода/определений вокруг!)
Учитывая вышеизложенное, как лучше всего подойти к рефакторингу кода в Clojure?