我想确保我遵循行业标准和最佳实践,这是我第一次真正接触MVC。在这种情况下,它是使用C#的ASP.NET MVC。
我将对我的模型使用Entity Framework 4.1和代码优先对象(数据库已经存在),因此将有一个DBContext对象用于从数据库中检索数据。
在我在asp.net网站上进行的演示中,控制器中包含数据访问代码。这对我来说似乎不正确,尤其是在遵循DRY(不要重复自己)做法时。
例如,假设我正在编写要在公共图书馆中使用的Web应用程序,并且有一个用于创建,更新和删除目录中书籍的控制器。
某些操作可能需要一个ISBN,并且需要返回“ Book”对象(请注意,这可能不是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);
}
}
相反,我是否应该在我的数据库上下文对象中实际上有一个方法可以返回一本Book?对我来说,这似乎是更好的隔离,并且有助于促进DRY,因为我可能需要通过ISBN在Web应用程序中的其他位置获取Book对象。
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));
}
}
这是我的应用程序编码中遵循的一组有效规则吗?
或者,我想一个更主观的问题是:“这是正确的方法吗?”