Método recomendado de diseño del modelo MVC de asp.net

asp.net c# dapper orm

Pregunta

Estoy tratando de decidir el mejor enfoque para un nuevo proyecto que estoy a punto de comenzar, cuando se trata del diseño de mi modelo (y estoy usando Dapper.net).

Me gusta la idea de tener mis modelos con objetos en lugar de propiedades Foreign Key, es decir,

public Post LastPost { get; set; }

vs

public int LastPostId { get; set; }

Sin embargo, si implemento este tipo de enfoque agradable y limpio, tengo que realizar múltiples mapas a todos los objetos (lo que conduce a posibles referencias circulares de objetos dentro de los objetos, (o tener que detener el mapeo múltiple en un punto determinado y por lo tanto terminar con Objetos NULL en algún punto del árbol de objetos). Además, si hago múltiples mapas en cierta medida, entonces quizás esté causando trabajo innecesario, realizando uniones, etc., cuando no siempre los van a necesitar.

O bien, si decido usar el mapeo múltiple para poblar mis objetos dentro de los objetos "según sea necesario" (en algunos de mis métodos de reposo, realice mapeo múltiple porque es necesario, y en otros métodos repos, no moleste en poblar los objetos ), entonces se siente un poco sucio porque no siempre puedo estar seguro de si un objeto (dentro de un objeto) es nulo o no.

He usado NHibernate (o al menos algunas de sus funciones más básicas) en el pasado y no tuve el dilema, ya que siempre tenía objetos dentro de mis modelos y si / cuando eran necesarios, podía confiar en la carga lenta para conseguirlos - Sin embargo, al no tener esa carga floja con Dapper.net, ¿no estoy realmente seguro del mejor enfoque?

Respuesta aceptada

¿Por qué no tener lo mejor de ambos mundos?

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

Esto le permite cargar con impaciencia cuando sea necesario con asignación múltiple y carga lenta, cuando es flojo;


Respuesta popular

bien, es un patrón de carga lenta de proxy.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow