Dúvida com aplicação Java

Bom dia pessoal!
Estou começando a desenvolver para desktop, a princípio estou programando um software que simula um controle de fluxo em um salão de beleza, e tenho algumas dúvidas, que são:

O programa possui diversas classes de negócio, entre elas estão:

  • Classe “Cliente” - Possui os dados do cliente;

  • Classe “TipoServico” - Possui informações de tipos de serviços disponibilizados pelo salão, por exemplo, maquiagem, unha, etc. Também possui o valor do tipoServico e a pontuação que ele gera ao cliente.

  • Classe “Serviço” - Possui tudo que o cliente fez, nela existe um array de “TipoServico”, identificando o que foi realizado.

Minha dúvida é que na aplicação deve conter os pontos acumulados do cliente, então sempre que um “tipoServico” for adicionado, a pontuação dele, deve ir para o cliente em questão. Assim devo criar um campo na classe “Cliente” identificando a pontuação? Ou eu posso consultar via banco de dados para mostrar ao usuário?

Desde já agradeço. Grande abraço!

vamos la

tudo é possivel. o cliente pode ter pontuação pre calculada ou vc pode calcular em algum momento.

entretanto pense numa coisa: é bastante provavel que o seu cliente tenha uma pontuação, mas esta seja armazenada em outra entidade. o motivo é que as vezes existem algumas operações que vc pode querer fazer com a pontuação como

resgate de pontos

duplicar pontos em promoção

expirar pontos antigos

etc.

dessa forma, se existe uma chance disso evoluir, não armazene na classe Cliente diretamente a pontuação.

de repente no natal o serviço X vai dar o dobro de pontos. de repente o cara pode trocar dinheiro por mais pontos. de repente tudo pode acontecer.

ate pq vc poderia ter um erro no seu sistema e o tipo serviço X tinha menos pontos. ou entao o serviço X mudou e agora da mais pontos mas a galera que pegou no passado nao pode ser afetada.

parece interessante vc manter historico disso. onde vc pode emitir um extrato. a partir desse historico vc pode calcular os pontos sem erro e vc pode pre-calcular baseado no fato do historico não ter mudado.

uma maneira interessante é a seguinte

classe Historico tem

  • identificador
  • cliente
  • data criacao
  • data expiracao ( se existir )
  • tipo servico ou operacao
  • pontos
  • alguma outra coisa que vc ache relevante

se um dia vc contabilizou menos, entao vc pode criar um serviço to tipo AJUSTE que vai dar os pontos que faltam.

se um dia o cara quer resgatar, vc cria um serviço do tipo RESGATE

de fato talvez vc precise de algo como Operacao, que pode ser Ajuste, Resgate, ou Servico e ai vc informa o Tipo.

se essa lista for imutavel, ou seja se der um erro vc faz uma transação compensatoria para ajustar, fica tranquilo de trabalhar.

tambem pode ser interessante vc ter soft delete ou seja um campo booleano ativo e vc pode inativar o que foi expirado (ou o que vc acha que foi fraude) sem perder o historico. nesse caso isso deixa de ser imutavel pois vc tem um estado ‘ativo’. tem pros e contras.

o que vc faz com o historico? cria uma classe Pontuacao que sabe calcular isso e salva isso baseado no identificador da transação mais recente. Esta atualizado? basta ver se tem uma transação mais nova.

Bom dia peczenyj!

Muito obrigado pela resposta, me ajudou bastante a pensar diferente. Acho que, realmente essa classe “Historico” pode resolver o meu problema.

Obrigado novamente! Abraços!

meu conselho: não complique. se vc acha que pode simplesmente somar a pontuação, comece assim e modifique depois.

Mais uma dúvida:

Neste caso, da classe histórico, os pontos não devem ser informados na classe “TipoServico”, certo? -

depende. os pontos podem mudar?

outra coisa, se vc fizer um resgate de x mil pontos, vc vai criar um tipo servico pra cada coisa?

lembre-se: eu lhe dei uma sugestão generica, vc deve adaptar ao seu problema.

Sim, os pontos podem mudar. Mas anteriormente, eu achava que, quando eles mudassem, o que tinha que ser feito era realizar a alteração do campo “pontos” na clase “TipoServico”.