我是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 实例。
答案 0 :(得分:3)
每次我收到用户时,我都不想获得UserGroup。
然后不要在对象模型中将它们绑在一起。它变得越来越复杂,你开始做的越多。
如果您要将单个实例传递给视图,则可以使用具有所需信息集的viewmodel。
如果您经常最终需要用户提供一组相关信息,请注意,这可能指向加载所有相关数据的替代方法。然后你就可以决定你是否想要加载它,并保存那些没有任何好处的额外往返。
答案 1 :(得分:0)
看一下使用拦截器here。您可以保持对象清洁并在工厂内进行所有初始化。