it-swarm.dev

Best Practices für die MVC-Architektur

Meine Frage betrifft eher das Erstellen einer MVC-Anwendung. Wir empfehlen beispielsweise, DI mit dem Repository-Muster zu verwenden, um den Datenzugriff vom Controller zu entkoppeln. Es wird jedoch nur sehr wenig darüber gesagt, wie dies speziell für MVC erfolgen soll. Wo würden wir zum Beispiel die Repository-Klassen platzieren? Sie scheinen nicht modellspezifisch zu sein, da das Modell ebenfalls relativ von den tatsächlichen Datenzugriffstechnologien entkoppelt sein sollte.

Eine zweite Frage betrifft die Strukturierung der Ebenen oder Ebenen. Die meisten Beispielanwendungen (Nerd Dinner, Music Store usw.) scheinen alle einen einstufigen 2-Layer-Ansatz (ohne Tests) zu verwenden, bei dem Controller normalerweise direkt L2S- oder EF-Code aufrufen.

Wenn ich eine mehrschichtige Anwendung erstellen möchte, welche Best Practices gibt es in Bezug auf MVC?

28

DI wird in ASP MVC mit einer Controller Factory) ausgeführt. Diese Factory wird verwendet, um Ihre Controller-Abhängigkeiten aufzulösen.

MvcContrib verfügt über einige Controller Facotry-Implementierungen, die Sie sofort verwenden können. Ich benutze ihre Castle Windsor-Implementierung und sie funktioniert gut. Würde auch vorschlagen, ihre TestHelper-Klasse zu überprüfen. Es hat einige sehr coole Funktionen zum Verspotten von Controller HTTPContext, Sessions usw. MVCContrib

Persönlich möchte ich meinen Models eine Repository-Instanz geben, mit der sie arbeiten können. Das Modell stellt eine API für das Repository (CRUD) bereit. Die Abhängigkeit des Controllers von einem bestimmten Modell wird bei der Erstellung (Konstruktor) eingefügt. Dies wird über die Controller Factory eingefügt. Dies ist mein Einstiegspunkt in das Objektdiagramm, das mein IoC-Container verwaltet.

5
Nick

Wo würden wir zum Beispiel die Repository-Klassen platzieren?

Sie gehören in das Modell; Sie sind das In-Application-Modell.

Wie strukturiere ich die Ebenen? Wenn ich eine mehrschichtige Anwendung erstellen möchte, welche Best Practices gibt es in Bezug auf MVC?

Ebenen Repräsentieren physische Codetrennungen. Ebenen repräsentieren logische Trennungen. Die Schichten (wie sie derzeit sind) funktionieren gut für MVC. Abhängig von der Menge der Geschäftslogik kann sie entweder in Ihrem Controller oder in einer separaten Baugruppe platziert und vom Controller während des Anforderungszyklus verwendet werden.

2
George Stocker