English 中文(简体)
POCO objects with lazy loading
原标题:

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.

最佳回答

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.

问题回答

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





相关问题
Manually implementing high performance algorithms in .NET

As a learning experience I recently tried implementing Quicksort with 3 way partitioning in C#. Apart from needing to add an extra range check on the left/right variables before the recursive call, ...

Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How do I compare two decimals to 10 decimal places?

I m using decimal type (.net), and I want to see if two numbers are equal. But I only want to be accurate to 10 decimal places. For example take these three numbers. I want them all to be equal. 0....

Exception practices when creating a SynchronizationContext?

I m creating an STA version of the SynchronizationContext for use in Windows Workflow 4.0. I m wondering what to do about exceptions when Post-ing callbacks. The SynchronizationContext can be used ...

Show running instance in single instance application

I am building an application with C#. I managed to turn this into a single instance application by checking if the same process is already running. Process[] pname = Process.GetProcessesByName("...

How to combine DataTrigger and EventTrigger?

NOTE I have asked the related question (with an accepted answer): How to combine DataTrigger and Trigger? I think I need to combine an EventTrigger and a DataTrigger to achieve what I m after: when ...

热门标签