рассмотреть этот метод:Снижение цикломатической сложности, не затрагивая бизнес-логику
public ActionResult DoSomeAction(ViewModel viewModel)
{
try
{
if (!CheckCondition1(viewModel))
return Json(new {result = "Can not process"});
if (CheckCondition2(viewModel))
{
return Json(new { result = false, moreInfo = "Some info" });
}
var studentObject = _helper.GetStudent(viewModel, false);
if (viewModel.ViewType == UpdateType.AllowAll)
{
studentObject = _helper.ReturnstudentObject(viewModel, false);
}
else
{
studentObject.CourseType = ALLOW_ALL;
studentObject.StartDate = DateTime.UtcNow.ToShortDateString();
}
if (studentObject.CourseType == ALLOW_UPDATES)
{
var schedule = GetSchedules();
if (schedule == null || !schedule.Any())
{
return Json(new { result = NO_SCHEDULES });
}
_manager.AddSchedule(schedule);
}
else
{
_manager.AllowAllCourses(studentObject.Id);
}
_manager.Upsert(studentObject);
return Json(new { result = true });
}
catch (Exception e)
{
// logging code
}
}
Этот метод имеет много точек выхода и имеет цикломатические Сложность . Наши лучшие практики говорят, что он не должен превышать .
Это из-за нескольких IFs?
Что я могу сделать, чтобы реорганизовать это так, чтобы у него было меньше точек выхода?
Заранее спасибо.
«5» звучит немного низко. nDepend и Microsoft рекомендуют [30] (http://www.ndepend.com/docs/code-metrics) и [25] (https://msdn.microsoft.com/en-us/library/ms182212.aspx) резекционно , _ «Это из-за нескольких IFs» _ - да и '||'. – MickyD
Я согласен с этим. С точки зрения обучения этот код может быть реорганизован только для уменьшения IF? – Codehelp
Несомненно. Легкий способ - просто взять метод и [раскол на более мелкие методы] (http: //www.ndepend.com/docs/code-metrics # CC) _ – MickyD