Enregistrer des données dans MVC sans Entity Framework?

asp.net asp.net-mvc c# dapper

Question

La majorité des exemples MVC que je vois semblent utiliser Entity Framework. J'écris actuellement une application MVC qui n'utilisera pas EF (à la place de Dapper) et je me demande où je devrais inclure la logique de persistance des données?

Ma première pensée a été de la placer avec les classes de mon modèle. Cela voudrait dire que mes classes de modèle ressembleraient à ceci:

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.
}

Mais je n'ai pas beaucoup utilisé MVC, donc je ne sais pas si c'est une pratique courante ou non.

Placer la logique de persistance des données dans le modèle est-elle une bonne pratique ou dois-je adopter une approche différente?

De plus, je crois que Stack Exchange utilise MVC et Dapper - si quelqu'un sait où il a parlé de la façon dont il a structuré son code, n'hésitez pas à me le signaler.

Réponse acceptée

Vous ne vous attendriez pas à devoir ouvrir votre ordinateur et à appuyer sur un bouton du disque dur pour y enregistrer des données, n'est-ce pas?

Fondamentalement, l'objectif du modèle MVC et les principes de conception SOLID en général sont de séparer vos préoccupations. Mettre la logique liée à l’enregistrement, la modification ou la mise à jour de votre base de données à l’intérieur de votre modèle, dont la responsabilité est d’être un objet contenant des données, est contraire à la philosophie du modèle auquel vous êtes censé vous abonner.

Votre contrôleur est l'endroit où vous souhaitez exécuter la logique pour enregistrer vos informations, mais il existe toujours une couche d'accès aux données à laquelle le problème d'interaction avec la base de données est analysé.

Donc, vous auriez:

public class MyController {
    IDataAccessLayer _dataAccessLayer;

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

Réponse populaire

Selon la conception de MVC, la persistance ne sera jamais un problème. Vous pouvez utiliser n'importe quel ORM souhaité. Pour que le modèle MVC fonctionne, il vous faut Model (ViewModel partiel) pour afficher vos données dans View. Le contrôleur gérera votre flux d'application.

Maintenant, à partir du contrôleur, vous pouvez appeler n'importe quel processus pour enregistrer vos données.

Je pense que vous pouvez utiliser le modèle de référentiel avec Dapper et EF.

La principale chose à faire est de veiller à ce que votre application ne soit pas persistant. Vous pouvez développer avec Dapper et plus tard vous pouvez également fournir un support pour EF sans trop changer au niveau de votre interface utilisateur.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi