Quero ter certeza de que estou seguindo os padrões e as melhores práticas do setor com meu primeiro crack real no MVC. Nesse caso, é o ASP.NET MVC, usando C #.
Eu usarei o Entity Framework 4.1 para o meu modelo, com objetos de primeiro código (o banco de dados já existe), portanto haverá um objeto DBContext para recuperar dados do banco de dados.
Nas demos que eu já fiz no site asp.net, os controladores têm um código de acesso a dados. Isso não parece certo para mim, especialmente ao seguir as práticas de DRY (não se repita).
Por exemplo, digamos que estou escrevendo um aplicativo Web para ser usado em uma biblioteca pública e que possuo um controlador para criar, atualizar e excluir livros em um catálogo.
Várias das ações podem ter um ISBN e precisam retornar um objeto "Livro" (observe que esse código provavelmente não é 100% válido):
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);
}
}
Em vez disso, eu deveria realmente ter um método no meu objeto de contexto db para retornar um livro? Parece que é uma separação melhor para mim e ajuda a promover o DRY, porque talvez eu precise obter um objeto Book pelo ISBN em outro lugar do meu aplicativo da web.
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));
}
}
Esse é um conjunto válido de regras a serem seguidas na codificação do meu aplicativo?
Ou, acho que uma pergunta mais subjetiva seria: "esse é o caminho certo para fazê-lo?"
fonte
É dessa maneira que eu faço isso, embora esteja injetando o provedor de dados como uma interface genérica de serviço de dados, para que eu possa trocar implementações.
Até onde eu sei, o controlador deve estar onde você obtém dados, executa quaisquer ações e passa dados para a visualização.
fonte