Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida Modelo de Aplicação Cliente e Gerenciador

Bom dia!

Minha dúvida está relacionado a boas práticas. Abaixo vou detalhar um cenário de uma aplicação, para melhor endendimento dessa dúvida.

Cenário:

Em um aplicação onde todos os dados vão ser consumido de um único servidor. Eu tenho o lado do cliente final e do gerenciador. O gerenciador basicamente ele faz cadastros de outras pessoas que pode gerenciar o sistema, cadastro de produtos, e etc... E no lado do cliente final é exibido todos os produtos definidos pelo gerenciador.

Então nesse cenário qual séria a melhor solução para o meu modelo, ele ter uma relação entre essas duas classes, ex:

public abstract class Usuario {}

public class Cliente extends Usuario {}

public class Gerente extends Usuario {}

É uma boa prática ter essa relação entre elas, ou devo criar duas classes distintas já que uma é para acesso do lado do Gerenciador e outra é para acesso do lado do Cliente final. Tem alguma melhor forma para fazer isso?

4 respostas
solução!

Fala ai Alex, de boa?

O que a galera geralmente faz é definir alguma classe(geralmente um enum) que tenha todos os níveis de acesso (roles) que um usuário possa ter, e dentro do usuário ele ter essa lista.

enum Role{

USER,MANAGER,ADMIN;
}
public class ApplicationUser{

    private List<Role> roles;
}

Boa tarde!

Matheus e quando esses usuários eles tem algumas distinções entre seus atributos de classe também, ex:

public class Gerente {
    ...
}

public class Cliente {
    ...
    private Endereco endereco;
}

Então, eu tenho um Gerente e um Cliente, caso eu inclua apenas uma classe com as Rules, ex:

public class Usuario {
    ...
    private Endereco endereco;
    private List<Role> roles;
}

Nesse caso vou resolver o problema, mas é uma boa prática fazer dessa maneira mesmo sabendo que no cadastro do meu Usuário Gerente nunca vou usar o atributo Endereco? Atualmente estava usando assim, e mudei para daquela forma com abstract e herdando para duas classes separadas, mas não sei qual séria a melhor maneira de fazer isso sem fugir das boas práticas, tem alguma outra solução para isso, ou normalmente é dessa forma que é feito.

Algo que pode fazer é na hora de cadastrar um novo usuário, você ter meio que um checkbox falando se é gerente ou não, se for, você mostra informações de endereço...

Certo, dessa forma eu resolvo meu problema. Mas eu volto a dúvida que me fez iniciar esse post, é uma boa prática criar uma classe que alguns atributos vai ser usado por um grupo de perfis apenas? Como citei, usando a classe abaixo, o atributo Endereco vai ser usado por todos os perfis de Cliente, e não vai ser usado por nenhum Gerente. Colocando o checkbox eu resolvo o problema do lado do cliente, mas do lado do modelo de negécio, essa séria a melhor solução?

public class Usuario {
    ...
    private Endereco endereco;
    private List<Role> roles;
}