【发布时间】:2015-08-28 05:33:36
【问题描述】:
考虑这种方法:
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
}
}
此方法有许多退出点,并且具有 8 的圈复杂度。 我们的最佳实践表明它不应大于 5。
是不是因为多个IF?
我可以做些什么来重构它以减少退出点?
提前致谢。
【问题讨论】:
-
我同意这一点。从学习的角度来看,是否可以重构此代码以减少 IF?
-
当然。一个简单的方法是只采用方法和 split into smaller methods