Рекомендуемый подход к дизайну модели asp.net MVC - PullRequest
2 голосов
/ 01 августа 2011

Я пытаюсь выбрать наилучший подход для нового проекта, который я собираюсь начать, когда речь идет о дизайне моей модели (и я использую Dapper.net).

Мне нравитсяидея иметь мои модели с объектами, а не со свойствами внешнего ключа, то есть

public Post LastPost { get; set; }

против

public int LastPostId { get; set; }

Однако, если я реализую этот вид чистого чистого подхода, мне придется- сопоставить со всеми объектами (что приводит к потенциальной круговой ссылке на объекты внутри объектов (или нужно прекратить мульти-отображение в определенной точке и, следовательно, в конечном итоге получить объекты NULL в некоторой точке в дереве объектов). Кроме того, если я сделаюmulti-map в некоторой степени, тогда я, возможно, вызываю ненужную работу, выполняю соединения и т. д., когда они не всегда нужны.

Или, если я решу использовать multi-mapping для заполнения моих объектов внутри объектовна основе «по мере необходимости» (в некоторых моих репо-методах выполняют мульти-картографирование, потому что это необходимо, а в других репо-методах не нужно заполнять объекты), тогда это выглядит какДело в том, что я не всегда могу быть уверен, является ли объект (внутри объекта) нулевым или нет.

Я использовал NHibernate (или, по крайней мере, некоторые из его более базовых функций) в прошлом, а неУ меня была дилемма, поскольку у меня всегда были объекты в моих моделях, и если / когда они были нужны, я мог бы положиться на ленивую загрузку, чтобы получить их - Однако, не имея такой ленивой загрузки с Dapper.net, я действительно не уверен в лучшем подходепойти с?

Ответы [ 2 ]

4 голосов
/ 17 августа 2011

Почему бы не получить лучшее из обоих миров?

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

Это позволяет увеличивать нагрузку при необходимости с мультикартированием и отложенной загрузкой, когда вы ленивы;

0 голосов
/ 06 апреля 2013

хорошо, это ленивый шаблон загрузки прокси.

...