Tôi muốn đảm bảo rằng tôi đang tuân theo các tiêu chuẩn ngành và thực tiễn tốt nhất với vết nứt thực sự đầu tiên của tôi tại MVC. Trong trường hợp này, đó là ASP.NET MVC, sử dụng C #.
Tôi sẽ sử dụng Entity Framework 4.1 cho mô hình của mình, với các đối tượng mã đầu tiên (cơ sở dữ liệu đã tồn tại), do đó sẽ có một đối tượng DBContext để lấy dữ liệu từ cơ sở dữ liệu.
Trong các bản demo tôi đã trải qua trên trang web asp.net, bộ điều khiển có mã truy cập dữ liệu trong đó. Điều này có vẻ không đúng với tôi, đặc biệt là khi tuân theo các thực hành DRY (không lặp lại chính mình).
Ví dụ: giả sử tôi đang viết một ứng dụng web sẽ được sử dụng trong thư viện công cộng và tôi có một bộ điều khiển để tạo, cập nhật và xóa sách trong danh mục.
Một số hành động có thể mất một số ISBN và muốn trả về một đối tượng "Sách" (lưu ý đây có thể không phải là mã hợp lệ 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);
}
}
Thay vào đó, tôi có thực sự nên có một phương thức trong đối tượng ngữ cảnh db của mình để trả về một Sách không? Điều đó có vẻ như là một sự tách biệt tốt hơn đối với tôi và giúp thúc đẩy DRY, bởi vì tôi có thể cần phải có một đối tượng Sách bằng ISBN ở một nơi khác trong ứng dụng web của mình.
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));
}
}
Đây có phải là một bộ quy tắc hợp lệ để tuân theo trong mã hóa ứng dụng của tôi không?
Hoặc, tôi đoán một câu hỏi chủ quan hơn sẽ là: "đây có phải là cách đúng đắn để làm điều đó?"