Voglio assicurarmi di seguire gli standard e le best practice del settore con il mio primo vero crack su MVC. In questo caso, è ASP.NET MVC, utilizzando 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 visitato sul sito Web asp.net, i controller dispongono di un codice di accesso ai dati. Questo non mi sembra giusto, specialmente quando si seguono le pratiche DRY (non ripeterle).
Ad esempio, diciamo che sto scrivendo un'applicazione web da utilizzare in una biblioteca pubblica, e ho un controller per creare, aggiornare ed eliminare libri in un catalogo.
Diverse azioni possono richiedere un codice ISBN e richiedere di restituire un oggetto "Libro" (nota 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, dovrebbe in realtà ho un metodo nel mio oggetto contesto db per restituire un libro? Sembra una separazione migliore per me, e aiuta a promuovere DRY, perché potrei aver bisogno di ottenere un oggetto Book per 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, immagino che una domanda più soggettiva sarebbe: "è questo il modo giusto per farlo?"