Все зависит от того, что должно делать ваше приложение.
Если это не более чем несколько представлений вокруг нескольких таблиц, тогда совершенно нормально сохранить эти объекты непосредственно из контроллера.Лучший дизайн, как правило, самый простой, и нет необходимости слишком усложнять вещи слоями, архитектурными узорами и так далее.Они актуальны, когда размер проекта намного больше, чем в вашем случае.
Хороший дизайн - это все о коммуникации.Если кто-то еще должен поддерживать ваш проект, ему будет ясно, где найти функциональность?
Я бы ожидал двух контроллеров: один для семинаров (называемый SeminarController) и один для регистрации (называемый EnrollmentController).У них будут методы для просмотра, вставки, изменения и удаления данных.Я мог бы легко расширить ваш проект, потому что я знаю, где (и как) найти код.Так что ваше предложение кажется подходящим.
Ответ на комментарий
В списке семинаров есть ссылка, указывающая на экран, где кто-то может зарегистрироваться длясеминар.Это действие должно знать, какой семинар был выбран.Способ сделать это - передать идентификатор семинара вместе с запросом, например, /Enrollment/Register/{seminar id}
.Это приводит к GET-запросу.Форма в представлении регистрации отправит введенные данные обратно в контроллер.
В EnrollmentController
у вас будет что-то вроде этого:
private readonly MyDbContext context;
// Constructor and other methods omitted
[HttpGet]
public ActionResult Register(int seminarId)
{
var seminar = context.Seminars.Single(x => x.Id == seminarId);
return View(seminar);
}
[HttpPost]
public ActionResult Register(Enrollment enrollment)
{
context.Enrollment.Add(enrollment);
return RedirectToAction("index", "Seminar");
}
В зависимости от требований, вы можетенеобходимо вставить некоторые проверки и т. д.