Я сталкиваюсь с ситуацией, когда у нас много очень длинных методов, 1000 строк и более.
Чтобы дать вам более подробную информацию, у нас есть список входящих команд высокого уровня, и каждый генерирует приводит к более длинному (когда-то огромному) списку команд нижнего уровня. Там factory создается экземпляр класса для каждой входящей команды. Каждый класс имеет метод обработки, в котором все команды нижнего уровня сгенерированы добавлены в последовательности. Как я уже сказал, эти последовательности команд и их параметры часто приводят к тому, что методы процесса достигают тысяч строк.
Есть много повторений. Многие шаблоны команд разделяются между разными командами, но код повторяется снова и снова. Это заставляет меня думать, что рефакторинг будет очень хорошей идеей.
Напротив, спецификации мы пришли точно в том же виде, что и текущий код. Очень длинный список команд для каждого входящего. Когда я пробовал какой-то рефакторинг, я начал чувствовать неудобство со спецификациями. Я пропускаю очевидную аналогию между спецификациями и кодом и теряю время, копаясь в вновь созданных общих классах.
Тогда вот вопрос: в общем, как вы думаете, такие очень длинные методы всегда нуждались бы в рефакторинге, или в подобном случае это было бы приемлемо? (к сожалению, рефакторинг спецификаций не является вариантом)
изменить: Я удалил все ссылки на "генерировать", потому что это действительно запутывало. Это не сгенерированный автоматически код.
class InCmd001 {
OutMsg process ( InMsg& inMsg ) {
OutMsg outMsg = OutMsg::Create();
OutCmd001 outCmd001 = OutCmd001::Create();
outCmd001.SetA( param.getA() );
outCmd001.SetB( inMsg.getB() );
outMsg.addCmd( outCmd001 );
OutCmd016 outCmd016 = OutCmd016::Create();
outCmd016.SetF( param.getF() );
outMsg.addCmd( outCmd016 );
OutCmd007 outCmd007 = OutCmd007::Create();
outCmd007.SetR( inMsg.getR() );
outMsg.addCmd( outCmd007 );
// ......
return outMsg;
}
}
здесь приведен пример одного входящего командного класса (написанного вручную в псевдо-С++)