考慮這個方法:降低圈複雜度,而不會影響業務邏輯
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
}
}
這種方法有許多出口點,並具有一個圈複雜度。 我們的最佳實踐表示,它不應該大於。
是因爲有多個IF?
我能做些什麼來重構這個,使它有更少的出口點?
在此先感謝。
「5」聽起來有點低。 nDepend和微軟建議[30](http://www.ndepend.com/docs/code-metrics)和[25](https://msdn.microsoft.com/en-us/library/ms182212.aspx)resectively 。 _「是否因爲多個IF」 - 是和「||」。 – MickyD
我同意這一點。從學習的角度來看,這個代碼可以重構,只是爲了減少IFs? – Codehelp
當然。一個簡單的方法是採取方法和_ [分割成更小的方法](http://www.ndepend。com/docs/code-metrics#CC)_ – MickyD