Ich möchte sicherstellen, dass ich bei meinem ersten echten Sprung bei MVC Branchenstandards und Best Practices befolge. In diesem Fall ist es ASP.NET MVC mit C #.
Ich werde Entity Framework 4.1 für mein Modell mit Code-First-Objekten verwenden (die Datenbank ist bereits vorhanden), sodass es ein DBContext-Objekt zum Abrufen von Daten aus der Datenbank gibt.
In den Demos, die ich auf der asp.net-Website durchlaufen habe, haben Controller einen Datenzugriffscode. Dies scheint mir nicht richtig zu sein, besonders wenn man den DRY-Praktiken folgt (sich nicht wiederholen).
Angenommen, ich schreibe eine Webanwendung, die in einer öffentlichen Bibliothek verwendet werden soll, und ich verfüge über einen Controller zum Erstellen, Aktualisieren und Löschen von Büchern in einem Katalog.
Einige der Aktionen benötigen möglicherweise eine ISBN und müssen ein "Book" -Objekt zurückgeben (beachten Sie, dass dies wahrscheinlich kein 100% gültiger Code ist):
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);
}
}
Stattdessen sollte eigentlich habe ich eine Methode in meinem db Kontextobjekt ein Buch zurückzubringen? Das scheint mir eine bessere Trennung zu sein und hilft, DRY zu fördern, da ich in meiner Webanwendung möglicherweise ein Buchobjekt über die ISBN an einer anderen Stelle abrufen muss.
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));
}
}
Ist dies ein gültiger Satz von Regeln, die bei der Codierung meiner Anwendung zu beachten sind?
Oder ich denke, eine subjektivere Frage wäre: "Ist dies der richtige Weg, um es zu tun?"
quelle
So habe ich es gemacht, obwohl ich den Datenprovider als generische Datendienstschnittstelle einspeise, damit ich Implementierungen austauschen kann.
Soweit ich weiß, ist der Controller dafür vorgesehen, Daten abzurufen, Aktionen auszuführen und Daten an die Ansicht zu übergeben.
quelle