У меня есть приложение с красным полем, которое имеет сложный метод. CC равен 14. Операторы if проверяют параметры приложения и генерируют соответствующий встроенный SQL.Уменьшить циклическую сложность проверки настроек
E.G. Этот оператор if проверяет настройки. настройки - это настраиваемый код, DTO с несколькими bool
(неbool?
).
string conditions = " AND (";
List<string> conditionStrings = new List<string>();
if (settings.AlwaysIncludeCommonResults && settings.SelectedCommonLabs.Count > 0)
{
string common = " (Table.Name in (";
for (int i = 0; i < settings.SelectedCommonLabs.Count; i++)
{
common += string.Format("'{0}'", settings.SelectedCommonLabs[i]);
if (i < settings.SelectedCommonLabs.Count - 1)
common += ", ";
}
common += ")) ";
conditionStrings.Add(common);
}
if (settings.AlwaysSelectLast24HoursResults)
{
string last24 = " (DateDiff(hh, Table.PerformedDtm, GetDate()) < 24) ";
conditionStrings.Add(last24);
}
Я не знаю, что делать, чтобы упростить эту логику bool. Нуль сливается? ... Я не знаю, что это сделает это лучше. Этот шаблон появляется несколько раз в том же методе. Поэтому я надеюсь повторно использовать ответ несколько раз, чтобы уменьшить общий CC и повысить удобочитаемость. Что ты предлагаешь?
ОБНОВЛЕНО
После принятия решения, чтобы вырвать первую проверку, добавляет дополнительную логику методы.
Это выглядит и кажется неправильным ... Почему код должен тратить время на создание сложного оператора SQL, если результаты не будут возвращены? – Alex
@alex - Согласовано. Я должен разорвать это на более высоком уровне. Этот метод все еще должен существовать (помните, что существует больше таких операторов, например, если запрос имеет реальные условия. Поэтому любые предложения по улучшению этого типа логики по-прежнему полезны. –
Мне было бы любопытно увидеть другие части этого метода. Возможно, есть другое место, где вы можете просто * не * выполнять проверки, а не пытаться их исправить. Нелегко исправить сложную последовательность, не видя ее вообще. – Alex