Voglio assicurarmi di seguire gli standard del settore e le migliori pratiche con il mio primo vero crack a MVC. In questo caso, è ASP.NET MVC, usando C #.
Userò Entity Framework 4.1 per il mio modello, con oggetti code-first (il database esiste già), quindi ci sarà un oggetto DBContext per il recupero dei dati dal database.
Nelle demo che ho visto sul sito Web asp.net, i controller hanno al loro interno un codice di accesso ai dati. Questo non mi sembra giusto, specialmente quando segui le pratiche DRY (non ripeterti).
Ad esempio, supponiamo che sto scrivendo un'applicazione Web da utilizzare in una biblioteca pubblica e che disponga di un controller per la creazione, l'aggiornamento e l'eliminazione di libri in un catalogo.
Molte delle azioni potrebbero richiedere un codice ISBN e potrebbero voler restituire un oggetto "Libro" (si noti che probabilmente non è un codice valido al 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);
}
}
Invece, dovrei effettivamente avere un metodo nel mio oggetto di contesto db per restituire un libro? Sembra che sia una migliore separazione per me e aiuta a promuovere il DRY, perché potrei aver bisogno di ottenere un oggetto Book tramite ISBN da qualche altra parte nella mia applicazione 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));
}
}
È un insieme valido di regole da seguire nella codifica della mia applicazione?
Oppure, suppongo che una domanda più soggettiva sarebbe: "è questo il modo giusto di farlo?"