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