views:

326

answers:

2

Hi!

I'am new to ASP.NET MVC, IoC, POCO, etc. So I want to know is it OK to use such kind of architecture.

This is my demo project.

Project.Core (this assembly referenced by all project)

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

Looks good, but how can I use lazy loading this way? I don't want to get UserGroups each time I'am getting User.

My idea is to modify my User class this way:

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

What is disadvantage of my solution? I don't like that my POCO object uses IUserGroupService instance.

+3  A: 

I don't want to get UserGroups each time I'am getting User.

Then don't tie them together in the object model. It gets complex fast, the more you start doing that.

If you are doing that to hand a single instance to the views, you can have a viewmodel with the set of info u need.

Pay attention if you constantly end up needing the user with a set of related information, which could point to an alternate way to load all that related data. And then you get to be able to decide if you'll want to eager load it, and save those extra roundtrips that don't do any good.

eglasius
A: 

Have a look at using interceptors here. You can keep your objects clean and do all the initialization inside factories.

Matthew