現在我已經開發了我的第一個大型(對我來說)MVC項目,現在事情變得非常難以瀏覽。.NET MVC儘可能保持控制器不被讀取的最佳實踐
我一直在重構重構,爲了保持控制器精簡併將所有數據移動到模型中,我正在尋求「最佳實踐」的現代示例。
我讀this article,詳細討論了一些事情,但沒有提供示例項目。
這裏發佈的大部分'最佳實踐'主題都傾向於鏈接到MVC Music Store或Nerd Dinner項目,但同時評論往往會說他們更多是'初學者指南'而不是'最佳實踐'的例子。 「
有誰知道任何最新的開源MVC項目,展示適當的開發結構?
請注意:我想學會解決的一個典型問題:我的控制器非常長,充滿了驅動網站的代碼 - 我需要將此代碼移入僅由控制器引用的方法。我在哪裏扔所有這些方法?
下面是一個來自控制器的代碼示例,如其中一個回覆的評論所示。我將如何將這些信息移到我的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;
}
}
}
我正在檢查代碼,發現很多錯誤。例如類handlers.GetFillupsForVehicle,首先它的矯枉過正(定義一個類作爲動詞),第二個是在類中做一些有用的唯一函數,它返回一個IEnumerable,顯然這個函數的代碼只返回一個List,所以它的在沒有的地方強制歧義。 – magallanes