Daten in MVC ohne Entity Framework speichern?

asp.net asp.net-mvc c# dapper

Frage

Die Mehrheit der MVC-Beispiele, die ich sehe, scheint Entity Framework zu verwenden. Ich schreibe gerade eine MVC-Anwendung, die EF nicht verwenden wird (stattdessen Dapper verwenden), und ich frage mich, wo ich die Datenpersistenzlogik einschließen sollte?

Mein erster Gedanke war, es zusammen mit den Klassen für mein Modell zu platzieren. Dies würde bedeuten, dass meine Modellklassen ungefähr wie folgt aussehen würden:

class User
{
   public int id {get; set;}
   public string name {get; set;}

   Create(string name)
   {
      // dapper to perform insert
   }

   Remove(int id)
   {
     // dapper to perform delete
   }

   //Update(),Delete() etc.
}

Aber ich habe MVC nicht viel benutzt, also bin ich mir nicht sicher, ob das eine übliche Praxis ist oder nicht.

Stellt die Datenpersistenzlogik eine gute Übung für das Modell dar oder sollte ich einen anderen Ansatz wählen?

Außerdem glaube ich, dass Stack Exchange MVC und Dapper verwendet - wenn irgendjemand von irgendwoher weiß, dass sie über die Strukturierung ihres Codes gesprochen haben, können Sie mich darauf hinweisen.

Akzeptierte Antwort

Sie würden nicht erwarten, Ihren Computer zu öffnen und eine Taste auf der Festplatte drücken, um Daten zu speichern, oder?

Der Zweck des MVC-Musters und der SOLID-Designprinzipien im Allgemeinen besteht darin, Ihre Bedenken zu trennen. Logik in Bezug auf das Speichern, Ändern oder Aktualisieren Ihrer Datenbank innerhalb Ihres Modells zu setzen, deren Aufgabe darin besteht, ein Objekt zu sein, das Daten enthält, widerspricht der Philosophie des Musters, das Sie in MVC abonnieren sollen.

In Ihrem Controller möchten Sie die Logik zum Speichern Ihrer Informationen ausführen, aber es gibt immer noch eine Datenzugriffsebene, auf die die Interaktion mit der Datenbank abstrahiert wird.

Also hättest du:

public class MyController {
    IDataAccessLayer _dataAccessLayer;

    public MyController(IDataAccessLayer dataAccessLayer) {
        _dataAccessLayer = dataAccessLayer;
    }
    public ActionResult Create(Model myModel){
        _dataAccessLayer.InsertIntoDatabase(myModel);
        return View();
    }
}

Beliebte Antwort

Nach dem Design von MVC Persistenz nie ein Problem sein. Sie können jedes beliebige ORM verwenden. Damit das MVC-Muster funktioniert, benötigen Sie Model (partielles ViewModel), um Ihre Daten in View anzuzeigen. Der Controller wird Ihren Anwendungsfluss handhaben.

Jetzt können Sie vom Controller aus einen beliebigen Prozess aufrufen, um Ihre Daten zu speichern.

Ich denke, dass Sie Repository-Muster mit Dapper genauso wie EF verwenden können.

Hauptsache, darauf zu achten, dass Ihre Anwendung nicht persistent sein sollte. Sie können mit Dapper entwickeln und später können Sie auch Unterstützung für EF bereitstellen, ohne viel auf der Ebene Ihrer Benutzeroberfläche zu ändern.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum