none
Design de classes RRS feed

  • Pergunta

  • Boa noite! Tenho que criar uma classe para meu sistema que representa seus usuários. São muitas informações que preciso guardar e não sei a melhor forma de se fazer. Tenho por exemplo propriedades que mantém informações sobre o cadastro em si como username, status, etc, outras sobre preferências de uso além das permissões. Devo criar classes separadamente ou juntar todas as propriedades numa mesma classe? Ex:

    class Usuario
    {
         private Preferencias m_Preferencias;
         private Permissoes m_Permissoes;
         private Cadastro m_Cadastro;

         public Preferencias Preferencias
         {
              get { return m_Preferencias; }
              set { m_Preferencias = value; }
         }

         public Permissoes m_Permissoes
         {
              get { return m_Permissoes; }
              set { m_Permissoes = value; }
         }

         public Cadastro Cadastro
         {
              get { return m_Cadastro; }
              set { m_Cadastro = value; }
         }
    }

    Depois teria o problema na forma de obter os dados. Na hora de alguém visualizar um perfil teria de retornar todos os dados, já se o usuário estiver usando o sistema precisaria pegar apenas partes dos dados. É para uma aplicação web e não desejo ficar recuperando aquilo que não vou usar num determinado local, com uma classe apenas teria momentos que sua instância possuíria propriedades sem valor definido, então pra quem usar na camada de apresentação ficaria algo sem transparência. Outro exemplo:

    Numa determinada seção do site, o usuário entraria para realizar um cadastro, preciso verificar se ele tem permissão de acesso e envio de conteúdo, nesse ponto na minha camada de dados eu teria um método que retornaria apenas suas permissões. Precisaria também obter suas preferências para definir a exibição de elementos da tela e então através de outro método eu obteria essas informações. Na camada de dados ficaria assim.

    public Usuario GetPerfil(int memberId)
    {
         // Retorno o cadastro completo
    }

    public Permissoes GetPermissoes(int memberId)
    {
         // Retorno somente as permissões
    }

    public Cadastro GetCadastro(int memberId)
    {
         // Retorno apenas dados cadastrais
    }

    Gostaria que comentassem sobre essas práticas, qual a melhor forma, definir apenas a classe Usuario e obter todos os dados fazendo apenas uma consulta, ou separar tudo e acessar apenas o que vou usar independente do número de consultas? Obrigado!
    sexta-feira, 20 de abril de 2007 02:57

Respostas

  • Ivo,

     

    A separação do perfil e das permissões eu acho boa, sugiro até você avaliar a opção de fazer uma terceira classe Perfil. A relação fica:

    Usuario -> Perfil -> Permissões

     

    Não gosto de ficar "complicando" muito a solução, mas isto facilita bastante a gestão dos usuários pelo responsável.

     

    Já o cadastro não sei se concordo, para mim username, senha, etc são propiedades do Usuario e devem permanecer ai.

     

    Eduardo Miranda

    http://eduardomiranda.net/blogs/dotnet

     

    sexta-feira, 20 de abril de 2007 13:26
  • Permissoes e Preferencias seriam classes separadas da forma que você fez. Caso justifique o ganho de performance, você pode utilizar a técnica de lazy loading, onde você carrega os dados do banco de dados somente quando for precisar deles.

    A classe cadastro não faz muito sentido pra mim, aparentemente são dados do próprio usuário e devem ficar na classe usuário.
    segunda-feira, 23 de abril de 2007 03:33
  • Só para colocar um pouco de lenha na fogueira... Smile

    Será que você não está recriando toda a parte de membership do .Net?

    quinta-feira, 26 de abril de 2007 21:53

Todas as Respostas

  • Ivo,

     

    A separação do perfil e das permissões eu acho boa, sugiro até você avaliar a opção de fazer uma terceira classe Perfil. A relação fica:

    Usuario -> Perfil -> Permissões

     

    Não gosto de ficar "complicando" muito a solução, mas isto facilita bastante a gestão dos usuários pelo responsável.

     

    Já o cadastro não sei se concordo, para mim username, senha, etc são propiedades do Usuario e devem permanecer ai.

     

    Eduardo Miranda

    http://eduardomiranda.net/blogs/dotnet

     

    sexta-feira, 20 de abril de 2007 13:26
  • Permissoes e Preferencias seriam classes separadas da forma que você fez. Caso justifique o ganho de performance, você pode utilizar a técnica de lazy loading, onde você carrega os dados do banco de dados somente quando for precisar deles.

    A classe cadastro não faz muito sentido pra mim, aparentemente são dados do próprio usuário e devem ficar na classe usuário.
    segunda-feira, 23 de abril de 2007 03:33
  • Só para colocar um pouco de lenha na fogueira... Smile

    Será que você não está recriando toda a parte de membership do .Net?

    quinta-feira, 26 de abril de 2007 21:53