Ich habe eine MVC-Site, die das Repository-Muster verwendet. Ich habe nicht das Gefühl, dass ich den MVC-Stil genug verwende, also mache ich mich bereit, einige davon neu zu entwerfen. Aber ich möchte es auch tun, wenn sich das Frontend jemals ändert, wird es einfacher sein, es auszutauschen.
Folgendes habe ich derzeit
Modelle - Einige meiner Modelle enthalten meine Entitäten / Klassen direkt. (Das Anmeldemodell enthält die Kundenklasse, die eine direkte Korrelation zur Kundentabelle / Repository-Klasse darstellt.) Ansichten - Einige meiner Ansichten enthalten Repo-Abfragen
_customerRepo.Query().FirstOrDefault(c => c.Login == User.Identity.Name);
Controller - Controller, die Repo-Abfragen aufrufen, und einige von ihnen verwenden auch einige Dienste, um die Repos aufzurufen
_customerService.GetAllCustomers()
was anruft
_customerRepo.Query().All();
Hier sind meine Gedanken:
1) Modelle sollten NUR die Daten enthalten, die in der Ansicht dargestellt werden müssen. Selbst wenn alle Eigenschaften der Kundentabelle / des Kundenobjekts in der Ansicht dargestellt werden, sollten sie in ihr eigenes Modell / ihre eigene Klasse neu geschrieben werden, damit die Ansicht nichts über die Datenbankarchitektur oder Backend-Objekte weiß
2) Ansichten sollten nur auf Modellobjekte zugreifen
3) (Und hier kämpfe ich, welchen Weg ich einschlagen soll)
a) Controller (oder irgendwo auf der MVC-Seite sollten Code sein, der die vom Repo / Services zurückgegebenen Objektdaten konvertiert und in die Modelle konvertiert. Ich gehe davon aus, dass ich diesen Code einfach in einen Modellkonstruktor einfügen könnte. Aber ich ' Wir haben festgestellt, dass DI einen leeren Standardkonstruktor erwartet, falls Validierungsfehler auftreten
b) Controller rufen Repo-Schnittstellen für benannte Methoden auf, um Daten abzurufen (dh _customerRepo.GetAllCustomers ()
c) Controller greifen NUR auf eine Service-Schicht zu. Die Service-Schicht ist dann das einzige, was mit der Repo-Schicht interagiert.
Versuche ich, die Ebenen für Modell, Controller, Service und Repo zu stark zu extrahieren? Ist die Serivces-Ebene zu viel Overhead, da alles von den Repos erledigt werden kann?
Was ist der empfohlene Ansatz zum Konvertieren der Objekte / Geschäftsentitäten in die Modelle?