Рефакторинг Ghetto Style
Jan. 21st, 2009 09:10 pmЛюбой программер, кто работал с большой и старой системой знает что с возрастом в ней накапливается некоторое количество хаков и недоделок, на которые так и не хватило времени. (См.: bit rot.) И сожалению, реальность данная нам в ощущениях обычно не позволяет полностью избавиться от этого мусора. Причём обычно из-за того, что удаление хаков потребует либо сокращения функциональности, либо уже системной реализации аналогичной функциональности, а это обычно грозит потерей человеко-часов без положительных внешних изменений. Ни то ни другое обычно не проходит через менеджмент. А избавиться от мусора в коде всё равно хочется.
В таких случаях приходится идти на компромисс. Заводим промежуточный гетто-компонент - или в иерархии классов, или в последовательности вызовов, или в качестве адаптеров между компонентами. В меру желания и возможности выпрямляем интерфейсы и реализацию. И затем последовательным рефакторингом выносим в этот компонент всё, что не укладывается в текущую архитектуру других компонент.
В результате мы имеем относительно "чистые" компоненты, которые опять могут развиваться и использоваться без оглядки на хаки. А также имеем отдельный контейнер для всей излишней энтропии системы, который надо или искоренять в будущем или просто особенно тщательно тестировать. В общем - все довольны, yo!