Я хочу переконатися, що я дотримуюсь галузевих стандартів та найкращих практик з моїм першим реальним тріском на MVC. У цьому випадку це ASP.NET MVC, використовуючи C #.
Я буду використовувати Entity Framework 4.1 для своєї моделі з кодовими першими об'єктами (база даних вже існує), тому буде об’єкт DBContext для отримання даних з бази даних.
У демонстраціях, які я пройшов на веб-сайті asp.net, контролери мають в них код доступу до даних. Мені це не здається правильним, особливо, якщо дотримуватися практики DRY (не повторюй себе).
Наприклад, скажімо, я пишу веб-додаток для використання в публічній бібліотеці, і у мене є контролер для створення, оновлення та видалення книг у каталозі.
Деякі дії можуть мати номер 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);
}
}
Натомість, чи повинен я насправді в своєму контексті db мати метод повернення однієї книги? Здається, це для мене краще розділення, і це сприяє просуванню 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));
}
}
Це дійсний набір правил, який слід дотримуватися при кодуванні моєї заявки?
Або, мабуть, більш суб’єктивним було б питання: "це правильний спосіб зробити це?"