具有延迟加载的POCO对象

时间:2009-12-01 06:26:23

标签: .net asp.net-mvc architecture lazy-loading poco

我是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);
}

看起来不错,但是我怎样才能以这种方式使用延迟加载?我每次得到用户时都不想获得 UserGroups

我的想法是以这种方式修改我的用户类:

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 实例。

2 个答案:

答案 0 :(得分:3)

  

每次我收到用户时,我都不想获得UserGroup。

然后不要在对象模型中将它们绑在一起。它变得越来越复杂,你开始做的越多。

如果您要将单个实例传递给视图,则可以使用具有所需信息集的viewmodel。

如果您经常最终需要用户提供一组相关信息,请注意,这可能指向加载所有相关数据的替代方法。然后你就可以决定你是否想要加载它,并保存那些没有任何好处的额外往返。

答案 1 :(得分:0)

看一下使用拦截器here。您可以保持对象清洁并在工厂内进行所有初始化。