Approche de conception de modèle MVP asp.net recommandée

asp.net c# dapper orm

Question

J'essaie de déterminer la meilleure approche pour un nouveau projet que je suis sur le point de démarrer, en ce qui concerne la conception de mon modèle (et j'utilise Dapper.net).

J'aime l'idée d'avoir mes modèles avec des objets plutôt que des propriétés de clé étrangère, c.-à-d.

public Post LastPost { get; set; }

contre

public int LastPostId { get; set; }

Cependant, si je mets en œuvre ce type d’approche propre, je dois mapper plusieurs objets sur tous les objets (ce qui conduit à des références circulaires potentielles d’objets dans les objets, ou à arrêter le mappage multiple à un moment donné et donc à Les objets NULL à un certain point dans l’arborescence des objets. De même, si je fais du multi-map jusqu’à un certain point, Im provoque peut-être du travail inutile, effectue des jointures, etc. quand ils ne seront pas toujours nécessaires.

Ou, si je décide d'utiliser le mappage multiple pour remplir mes objets dans des objets selon les besoins (dans certaines de mes méthodes de repositionnement, effectuez un mappage multiple parce que cela est nécessaire, et dans d'autres méthodes de mise en pension, ne remplissez pas les objets) ), alors il se sent un peu sale en ce sens que je ne peux pas toujours être sûr qu'un objet (dans un objet) est nul ou non.

J'ai utilisé NHibernate (ou du moins certaines de ses fonctionnalités les plus élémentaires) dans le passé et je n'avais pas le dilemme, car j'avais toujours des objets dans mes modèles et si / quand ils étaient nécessaires, je pouvais compter sur un chargement paresseux - Cependant, ne pas avoir ce chargement paresseux avec Dapper.net Je ne suis vraiment pas sûr de la meilleure approche à suivre?

Réponse acceptée

Pourquoi ne pas avoir le meilleur des deux mondes?

bool _lastPostLoaded;
private Post _lastPost; 
public Post LastPost 
{ 
   get 
   {
      if(!_lastPostLoaded)
      {
         _lastPost = cnn.Query<Post>("select * from Posts where Id = @lastPostId", 
              new {lastPostId});
         _lastPostLoaded = true;
      }
      return _lastPost;
   } 
   set 
   {
      _lastPost = value;
      _lastPostLoaded = true;
   }
}

Cela vous permet de charger rapidement lorsque cela est nécessaire avec le mappage multiple et le chargement paresseux, lorsque vous êtes paresseux;


Réponse populaire

bon, c'est le modèle de proxy de chargement paresseux.




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