几个月来,我一直在开发我的第一个大型(对我而言)MVC 项目,但事情变得非常难以驾驭。
我一直在重构方面有所懈怠,并且正在寻找“最佳实践”的现代示例,以保持您的控制器精简并将所有这些数据移动到您的模型中。
我阅读了这篇详细讨论事情的文章,但没有提供示例项目。
此处发布的大多数“最佳实践”主题倾向于链接到 MVC 音乐商店或 Nerd Dinner 项目,但同时评论倾向于说它们更像是“初学者指南”,而不是“最佳实践”的示例。
有谁知道任何展示正确开发结构的最新开源 MVC 项目?
注意:我想学习解决的一个典型问题:我的控制器很长,并且充满了驱动网站的代码 - 我需要将此代码移到仅由控制器引用的方法中。我在哪里扔所有这些方法?
这是我在控制器中的代码示例,正如对其中一个回复的评论所建议的那样。我如何将这些信息中的一些转移到我的 ViewModel 中?(我在下面包含了 ViewModel):
控制器:
public ActionResult AttendanceView(int id)
{
//
// Generates list of Attendances specifically for current Course
var attendanceItems = db.Attendance.Where(s => s.CourseID == id);
List<Attendance> attendanceItemsList = attendanceItems.ToList();
// End of generating list of Attendances
//
// Generates list of Students in alphabetical order sorted by LastName
var student = attendanceItemsList.Select(a => a.Student).Distinct().OrderBy(s => s.LastName);
List<Student> StudentList = student.ToList();
// End of generating list of Students
//
// Generates list of AttendingDays specifically for current Course
Course course = db.Courses.FirstOrDefault(p => p.CourseID == id);
List<int> attDayList = new List<int>();
for (int i = 0; i < course.AttendingDays; i++)
{
attDayList.Add(i + 1);
};
// End of generating list of AttendingDays
AttendanceReportViewModel model = new AttendanceReportViewModel
{
AttendanceDays = attDayList,
Students = StudentList,
Attendances = attendanceItemsList,
courseId = id
};
return View(model);
}
视图模型:
namespace MyApp.ViewModels
{
public class AttendanceReportViewModel
{
public List<int> AttendanceDays { get; set; }
public List<Student> Students { get; set; }
public List<Attendance> Attendances { get; set; }
public int courseId { get; set; }
public string IsPresent(Student student, int attendanceDay)
{
return Attendances.Single(a => a.StudentID == student.StudentID && a.AttendanceDay == attendanceDay).Present ? MyAppResource.Present_Text : MyAppResource.Absent_Text;
}
}
}