Я хочу удостовериться, что я следую отраслевым стандартам и передовым практикам с моей первой настоящей разработкой в MVC. В данном случае это ASP.NET MVC, использующий C #.
Я буду использовать Entity Framework 4.1 для моей модели с объектами первого кода (база данных уже существует), поэтому будет объект DBContext для извлечения данных из базы данных.
В демонстрациях, которые я просмотрел на сайте asp.net, контроллеры содержат код доступа к данным. Это не кажется мне правильным, особенно когда следуешь СУХИМ (не повторяйся) практикам.
Например, скажем, я пишу веб-приложение для использования в публичной библиотеке, и у меня есть контроллер для создания, обновления и удаления книг в каталоге.
Некоторые из действий могут потребовать ISBN и могут потребовать возврата объекта «Книга» (обратите внимание, что это, вероятно, не на 100% допустимый код):
public class BookController : Controller
{
LibraryDBContext _db = new LibraryDBContext();
public ActionResult Details(String ISBNtoGet)
{
Book currentBook = _db.Books.Single(b => b.ISBN == ISBNtoGet);
return View(currentBook);
}
public ActionResult Edit(String ISBNtoGet)
{
Book currentBook = _db.Books.Single(b => b.ISBN == ISBNtoGet);
return View(currentBook);
}
}
Вместо этого, должен ли я на самом деле иметь метод в моем объекте контекста БД для возврата одной Книги? Кажется, что это лучшее разделение для меня и помогает продвигать DRY, потому что мне может понадобиться получить объект Book по ISBN где-то еще в моем веб-приложении.
public partial class LibraryDBContext: DBContext
{
public Book GetBookByISBN(String ISBNtoGet)
{
return Books.Single(b => b.ISBN == ISBNtoGet);
}
}
public class BookController : Controller
{
LibraryDBContext _db = new LibraryDBContext();
public ActionResult Details(String ISBNtoGet)
{
return View(_db.GetBookByISBN(ISBNtoGet));
}
public ActionResult Edit(ByVal ISBNtoGet as String)
{
return View(_db.GetBookByISBN(ISBNtoGet));
}
}
Это действительный набор правил, которым нужно следовать в кодировке моего приложения?
Или, я думаю, более субъективный вопрос был бы: «Это правильный способ сделать это?»
источник
Вот как я это делал, хотя я внедряю провайдера данных как универсальный интерфейс службы данных, чтобы я мог поменять местами реализации.
Насколько я знаю, контроллер предназначен для того, чтобы получать данные, выполнять какие-либо действия и передавать данные в представление.
источник