[RESOLVIDO] Modelagem Classe | Boas práticas

Olá galera. Modelei um classe para Usuário em um projeto mas estou com dúvidas se a maneira como construi é “correta”. O cenário é o seguinte:

A aplicação terá os usuários:
especialista, líder, coordenador, supervisor, gerente e administrador. Então, criei a classe Usuario:

public class Usuario {

private int id;
private String nome;
private String email;
private String telefone;
private Perfil perfil;

... getters and setters ...

}

e a classe Perfil:

public class Perfil {
    private int id;
    private String nome;
}

Neste cenário, eu deveria:

  • criar uma classe para representar cada tipo de usuário? Porque?
  • criar uma classe do tipo enum para perfil?
  • existe uma boa prática para este tipo de modelagem?
  • adicionalmente, para tratar as questões de acesso e autorização a aplicação estas duas classes seriam suficientes? (não estou me referindo a implementações de mecanismos de login)

Valeu!

Classe do tipo enum não existe, enum é um tipo específico.

Vamos lá, você deve entender que classe é, de modo geral, um agrupamento de características (atributos) e ações (métodos) que estão ligados à um grupo de objetos.

Desta maneira, você começa a modelar as coisas, como você fez. Criando a classe usuário.
A partir daí, você precisa ver se cada um dos perfis é um conjunto de objetos com características ou ações próprias (aí você estende a classe usuário para cada especialização necessária) ou se cada perfil é um atributo de usuário (o cenário mais real, mais possível).

Sobre se estas classes seriam suficientes, quais são os requisitos para controle de acesso? Estas classes atendem aos mesmos?

Oi Darlan, você está todas hein rsrs … legal pela ajuda. Você descreveu exatamente o que eu estava pensando. Mas como não consegui encontrar um modelo de arquitetura assim para validar minha implementação, compartilhei a dúvida aqui. Seguirei assim.

Obrigado!

olá, aproveitando o post, em realção a duvida do amigo ai. No caso de Herança teria uma boa pratica padrao a se seguir ou isso vai depender muito do projeto em si.

um exemplo: Uma Clinica tem Secretaria,Medico e administrador.
Seria ideal ter um classe Usuario ou Pessoa e herdar ou deixar os atributos para todos eles?

Depende do projeto, não há uma receita única.

Para um exemplo simples como esse seu (Pessoa -> [Secretaria, Medico, Administrador]), pode ser viável sim, mas tudo depende do escopo e requisitos.

Abraço.

Cara, de Fowler a Robert Martin, eu diria que a melhor prática é não usar.
Mas, como é um conceito de OO e o java implementa e etc, etc, etc, você deve, sempre, ter cuidado com o uso de herança.
Lembre-se de seguir os princípios S.O.L.I.D. em que, um deles, preza por dar preferência à abstração e não à implementação.