D>А ещё вспоминается метода Кента Бека (описана кажется в TDD): 10 пишем лишь бы работало; 20 удаляем задвоения кода; goto 10. Только вот в данном случае на входе шага 20 будет строк эдак 5-10 тысяч, зубодробительных костылей. Как там я буду задвоения искать и удалять/заворачивать в паттерны — одному богу известно.
немного офф: не так уж редко встречаются ситуации, когда удаление повторений делает код хуже (потому что вводится лишняя сущность, и если она недостаточно generic, то она просто добавляет шум).