Я унаследовал монстра.
Это маскировка, поскольку приложение .NET 1.1 обрабатывает текстовые файлы, соответствующие стандартам оплаты по требованию Healthcare (ANSI 835), но это монстр. Обработанная информация относится к заявкам на здравоохранение, EOB и возмещениям. Эти файлы состоят из записей, которые имеют идентификатор в первых нескольких позициях и полях данных, отформатированных в соответствии со спецификациями для этого типа записи. Некоторые идентификаторы записей являются идентификаторами контрольного сегмента, которые ограничивают группы записей, относящихся к определенному типу транзакции.
Чтобы обработать файл, мой маленький монстр читает первую запись, определяет тип транзакции, которая должна произойти, затем начинает обрабатывать другие записи, основываясь на том, какая транзакция в данный момент обрабатывается. Для этого используется вложенное if. Поскольку существует несколько типов записей, необходимо принять ряд решений. Каждое решение включает в себя обработку и 2-3 других решения, которые необходимо принять на основе предыдущих решений. Это означает, что вложенное, если имеет много гнезд. Это где моя проблема.
Этот вложенный, если длина 715 строк. Да, это правильно. Семьсот-и-Fif-подросток. Я не эксперт по анализу кода, поэтому я загрузил несколько бесплатных инструментов анализа и придумал рейтинг McCabe Cyclomatic Complexity 49. Они говорят мне, что довольно большое число. Высокий, как в подсчете пыльцы в районе Атланты, где 100 является стандартом для высоких, и в новостях говорится: "Сегодня количество пыльцы составляет 1,523". Это один из лучших примеров Anti-Pattern Arrow, который я когда-либо посещал. При его наивысшем отступении глубиной 15 табов.
Мой вопрос в том, какие методы вы бы предложили реорганизовать или реструктурировать такую вещь?
Я потратил некоторое время на поиски идей, но ничто не дало мне хорошей опоры. Например, подстановкой условия охраны для уровня является один метод. У меня есть только один из них. Один гнездо вниз, четырнадцать, чтобы идти.
Возможно, есть шаблон дизайна, который может быть полезен. Может ли Цепочка Командования быть способ приблизиться к этому? Имейте в виду, что он должен оставаться в .NET 1.1.
Спасибо за любые идеи.