POCO объекты с ленивой загрузкой - PullRequest
2 голосов
/ 01 декабря 2009

Я новичок в ASP.NET MVC, IoC, POCO и т. Д. Поэтому я хочу знать, нормально ли использовать такую ​​архитектуру.

Это мой демонстрационный проект.

Project.Core ( на эту сборку ссылается весь проект )

public class User
{
   public string Name {get; set;}
   public List<UserGroup> UserGroups{get; set}
}
public class UserGroup
{
   public string Title{get; set;}
}
public interface IUserService 
{
   User GetById(int id);
}
public interface IUserGroupService 
{
   List<UserGroup> GetByUser(User user);
}

выглядит хорошо, но как я могу использовать ленивую загрузку таким образом? Я не хочу получать Группы пользователей каждый раз, когда я получаю Пользователь .

Моя идея состоит в том, чтобы изменить мой Пользователь класс таким образом:

public class User
{
   public string Name {get; set;}
   public List<UserGroup> UserGroups
   {
       get { return _groups ?? (_groups = Services.UserGroupService.GetByUser(this)); }
       set { _group = value;}
   }
}

public class Services
{
    // this class populates some kind with Unity
    public static IUserGroupService UserGroupService {get; set;}
}

В чем недостаток моего решения? Мне не нравится, что мой объект POCO использует IUserGroupService instance.

Ответы [ 2 ]

3 голосов
/ 01 декабря 2009

Я не хочу получать группы пользователей каждый раз, когда получаю пользователя.

Тогда не связывайте их вместе в объектной модели. Это быстро усложняется, чем больше ты начинаешь это делать.

Если вы делаете это для передачи одного экземпляра представлениям, у вас может быть модель представления с набором необходимой вам информации.

Обратите внимание, если вам постоянно требуется пользователь с набором связанной информации, которая может указывать на альтернативный способ загрузки всех этих связанных данных. И тогда вы сможете решить, хотите ли вы загружать его и сохранить те дополнительные обходы, которые не приносят пользы.

0 голосов
/ 01 декабря 2009

Посмотрите на использование перехватчиков здесь . Вы можете содержать свои объекты в чистоте и выполнять всю инициализацию на фабриках.

...