Last active
February 24, 2020 11:23
-
-
Save asouza/cc602e9cc02b887f75d2a2cc4d37f6c6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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; | |
} | |
} |
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
Alberto, na versão 2 não deveria ser algo assim: