Je veux m'assurer de suivre les normes de l'industrie et les meilleures pratiques avec mon premier vrai crack chez MVC. Dans ce cas, c’est ASP.NET MVC, en utilisant C #.
J'utiliserai Entity Framework 4.1 pour mon modèle, avec des objets commençant par le code (la base de données existe déjà). Il y aura donc un objet DBContext pour extraire des données de la base de données.
Dans les démos que j'ai visionnées sur le site Web asp.net, les contrôleurs ont un code d'accès aux données. Cela ne me semble pas correct, surtout lorsque vous suivez les pratiques de DRY (ne vous répétez pas).
Par exemple, disons que je suis en train d’écrire une application Web à utiliser dans une bibliothèque publique et que j’ai un contrôleur pour créer, mettre à jour et supprimer des livres dans un catalogue.
Plusieurs actions peuvent prendre un ISBN et doivent vouloir renvoyer un objet "Livre" (notez que ce n'est probablement pas du code valide à 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);
}
}
Au lieu de cela, dois - je avoir en fait une méthode dans mon db objet de contexte pour retourner un livre? Cela semble être une meilleure séparation pour moi et contribue à promouvoir DRY, car je pourrais avoir besoin d'obtenir un objet Book par ISBN quelque part ailleurs dans mon application 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));
}
}
Est-ce un ensemble de règles valide à suivre dans le codage de mon application?
Ou, je suppose une question plus subjective serait: "est-ce la bonne façon de le faire?"
la source
C’est ce que je fais, même si j’injecte le fournisseur de données en tant qu’interface de service de données générique afin de pouvoir permuter les implémentations.
Autant que je sache, le contrôleur est censé être l'endroit où vous obtenez les données, effectuez toutes les actions et transmettez les données à la vue.
la source