Pergunta

I'am novo para ASP.NET MVC, IoC, POCO, etc. Então, eu quero saber é OK para usar esse tipo de arquitetura.

Este é o meu projeto de demonstração.

Project.Core ( este assembly referenciado por todos projeto )

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

Parece bom, mas como eu posso usar o carregamento lento desta maneira? Eu não quero para obter Grupos cada vez I'am recebendo Usuário .

A minha ideia é modificar a minha Usuário classe desta maneira:

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

O que é desvantagem da minha solução? Eu não gosto que os meus POCO usos objeto IUserGroupService instância.

Foi útil?

Solução

Eu não quero ficar Grupos cada vez I'am ficando usuário.

Então não amarrá-los juntos no modelo de objeto. Fica rápida complexa, mais você começar a fazer isso.

Se você está fazendo isso para entregar uma única instância para os pontos de vista, você pode ter um viewmodel com o conjunto de informações u precisa.

Preste atenção se você acabar constantemente necessitando o usuário com um conjunto de informações relacionadas, o que poderia apontar para um caminho alternativo para carregar todos os dados relacionados. E então você começa a ser capaz de decidir se você vai querer carga ansioso lo, e salvar aqueles roundtrips extras que não fazem nenhum bem.

Outras dicas

Tenha um olhar em usar interceptadores aqui . Você pode manter seus objetos limpo e fazer tudo a inicialização dentro das fábricas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top