Skip to content

Instantly share code, notes, and snippets.

@asouza
Last active February 24, 2020 11:23
Show Gist options
  • Save asouza/cc602e9cc02b887f75d2a2cc4d37f6c6 to your computer and use it in GitHub Desktop.
Save asouza/cc602e9cc02b887f75d2a2cc4d37f6c6 to your computer and use it in GitHub Desktop.
//exemplo mexendo nas referências que não deveria
public class PagamentoController {
@Post("/pagamento/usuario/{usuarioId}")
public void aceita(@PathVariable("usuarioId") Long usuarioId,@Valid NovoPagamentoForm dadosPagamento) {
Usuario novoCliente = usuarioRepository.findyId(usuarioId);
//novoCliente.getPagamento() => Optional.empty aqui
novoPagamentoService.executa(novoCliente,dadosPagamento);
//novoCliente.getPagamento() => Optional(pagamento)
//como você ia saber que o estado foi alterado?
//e se você fizer isso aqui fora?
//novoCliente.setPagamento(dadosPagamento.novoPagamento())
}
}
class NovoPagamentoService {
public void executa(Usuario novoCliente, @Valid NovoPagamentoForm dadosPagamento) {
Pagamento novoPagamento = dadosPagamento.novoPagamento();
pagamentoRepository.save(novoPagamento);
//aqui vem a alteração indevida. Este método altera a referência do usuário mexendo em sei lá o que
novoCliente.atualizaPagamento(novoPagamento);
}
}
///////versão 2 e que eu acho melhor
public class PagamentoController {
@Post("/pagamento/usuario/{usuarioId}")
public void aceita(@PathVariable("usuarioId") Long usuarioId,@Valid NovoPagamentoForm dadosPagamento) {
Usuario novoCliente = usuarioRepository.findyId(usuarioId);
//novoCliente.getPagamento() => Optional.empty aqui
Pagamento novoPagamento = novoPagamentoService.executa(novoCliente,dadosPagamento);
//novoCliente.getPagamento() => Optional.empty de novo
novoCliente.setPagamento(novoPagamento);
//só quem mexe na referência é que m cria. Com essa régua, o seu código fica muito mais fácil de ser acompanhado.
//Se você não quer alterar aqui, carregue o usuário em outro lugar.
}
}
class NovoPagamentoService {
public Pagamento executa(Usuario novoCliente, @Valid NovoPagamentoForm dadosPagamento) {
Pagamento novoPagamento = dadosPagamento.novoPagamento();
pagamentoRepository.save(novoPagamento);
return novoPagamento;
}
}
@kauanmocelin
Copy link

kauanmocelin commented Feb 22, 2020

Alberto, na versão 2 não deveria ser algo assim:

  public Pagamento executa(Usuario novoCliente, @Valid NovoPagamentoForm dadosPagamento) {
    Pagamento novoPagamento = dadosPagamento.novoPagamento();
    pagamentoRepository.save(novoPagamento);
    return novoPagamento;
  }

@asouza
Copy link
Author

asouza commented Feb 24, 2020

Faz todo sentido, copiei errado o trecho de código... Valeu Kauan!!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment