Rozwijam swój pierwszy duży (dla mnie) projekt MVC od kilku miesięcy i rzeczy stają się niezwykle trudne w nawigacji..NET MVC Najlepsze praktyki, jeśli chodzi o utrzymanie kontrolera z bardzo nieczytelnego
Zwalczam refaktoryzację i szukam współczesnych przykładów "najlepszych praktyk", jeśli chodzi o utrzymanie cienkiego kontrolera i przenoszenie wszystkich tych danych do modeli.
Czytam this article, który omawia szczegółowo szczegóły, ale nie zapewnia przykładowego projektu.
Wątki "najlepszych praktyk" zamieszczane tutaj mają tendencję do linkowania do sklepu muzycznego MVC lub projektu Nerd Dinner, ale w tym samym czasie komentarze raczej mówią, że są raczej "przewodnikami dla początkujących", a nie przykładami "najlepszych praktyk". "
Czy ktoś wie o wszelkich aktualnych projektach MVC o otwartym kodzie źródłowym, które wykazują właściwą strukturę rozwoju?
uwaga: Typowy problem, który chciałbym nauczyć się rozwiązywać: Moje kontrolery są bardzo długie i pełne kodu, który napędza witrynę - muszę przenieść ten kod do metod, które są jedynie przywoływane przez kontroler . Gdzie mogę rzucić wszystkie te metody?
Oto próbka mojego kodu z kontrolera, jak sugeruje komentarz do jednej z odpowiedzi. W jaki sposób przenieść niektóre z tych informacji do mojego ViewModel? (Mam włączone poniższy ViewModel):
Kontroler:
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);
}
ViewModel:
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;
}
}
}
Sprawdzam kod i znalazłem wiele błędów. Na przykład klasa handlers.GetFillupsForVehicle, najpierw jego przeskok (definiująca klasę jako czasownik) i druga jedyna funkcja, która robi coś użytecznego w klasie, zwraca wartość IEnumerable, gdzie wyraźnie kod funkcji zwraca tylko listę, więc jej wymuszając dwuznaczność tam, gdzie jej nie ma. – magallanes