2

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

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

我的想法是这样修改我的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实例。

4

2 回答 2

3

我不想每次获得用户时都获得用户组。

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

如果您这样做是为了将单个实例交给视图,您可以拥有一个包含您需要的信息集的视图模型。

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

于 2009-12-01T06:43:41.940 回答
0

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

于 2009-12-01T14:08:24.453 回答