Maquina de Café - Design Patterns#18
Conversation
gcestaro
left a comment
There was a problem hiding this comment.
Parabéns pela entrega! 👏
Deixei alguns comentários para melhorar mais
|
|
||
| public class CafeFxLauncher { | ||
| public static void main(String[] args) { | ||
| Main.main(args); |
There was a problem hiding this comment.
Pq precisa dessa classe com método main tb?
There was a problem hiding this comment.
Isso é por conta do JavaFX, no Java8 quando um projeto com JavaFX era compilado em um runnable Jar file, o processo era automático e você podia compartilhar para qualquer sistema operacional sem ocorrer nenhum erro, já no Java11+ o JavaFX não faz esse processo de instalar as bibliotecas necessárias para cada sistema operacional automaticamente, então eu tive que utilizar um macete com o maven que eu achei em um vídeo depois de pesquisar muito, tentei procurar o vídeo novamente pra mandar o link mas não achei, mas basicamente consiste em instalar as dependências manualmente do JavaFX para as outras plataformas utilizando o maven, a desvantagem é que o arquivo ficava muito pesado, ai eu acabei deixando pra lá nessa ultima versão, e eu já estava acostumado a usar esse arquivo como intermediário por conta desse macete, e acabei deixando assim, mas eu realmente deveria ter retirado, já que não estou mais utilizando.
| private FormaDePagamento[] formaDePagamentos = {FormaDePagamento.CEDULA, FormaDePagamento.DEBITO}; | ||
|
|
||
| @FXML private ChoiceBox<Double> choiceCedulas; | ||
| private Double[] cedulas = {2.0, 5.0, 10.0, 20.0, 50.0, 100.0, 200.0}; |
There was a problem hiding this comment.
É uma boa prática usar BigDecimal ao invés de Double para valores monterários, onde a precisão de casas decimais importa
| try { | ||
| maquinadecafe.comprarBebida(bebidasPreparaveis.getValue(), sliderAcucar.getValue()); | ||
| } catch (Exception e) { | ||
| System.out.println(e.getMessage()); |
There was a problem hiding this comment.
Aqui vc poderia utilizar alguma ferramenta de log, como log4j ou slf4j
| labelStatus.setText(e.getMessage()); | ||
| } | ||
| } | ||
| // |
There was a problem hiding this comment.
evite deixar comentários pelo código
| } | ||
| // | ||
| private void switchTipoDeposita(ActionEvent event) { | ||
| if (!btnDepositar.isVisible()) btnDepositar.setVisible(true); |
There was a problem hiding this comment.
Para melhor legibilidade do código, usar sempre chaves e quebra de linhas em ifs é considerado uma boa prática
| } | ||
|
|
||
| @Test | ||
| void jogarExceptionSacarCreditoComValorZero() { |
There was a problem hiding this comment.
Um detalhe bobo, lancar exception ao invés de jogar é uma fala mais comum entre desenvolvedores
| aguaReservatorio.abastecer(300); | ||
| aguaReservatorio.abastecer(800); | ||
| }); | ||
| assertTrue(e.getMessage().contains("Valor Invalido!")); |
There was a problem hiding this comment.
Poderia ser uma mensagem melhor, como "o limite do reservatório excedeu" ou algo assim
| Exception e = assertThrows(Exception.class , () -> { | ||
| aguaReservatorio.abastecer(0); | ||
| }); | ||
| assertTrue(e.getMessage().contains("Valor Invalido!")); |
There was a problem hiding this comment.
Aqui faz sentido Valor Invalido
| aguaReservatorio.abastecer(50); | ||
| aguaReservatorio.usarAgua(300); | ||
| }); | ||
| assertTrue(e.getMessage().contains("Valor Invalido")); |
There was a problem hiding this comment.
Aqui a mensagem poderia ser melhor, como "Não tem água suficiente" ou algo assim.
| Exception e = assertThrows(Exception.class , () -> { | ||
| capacidadeReservatorio.setCapacidade(0); | ||
| }); | ||
| assertTrue(e.getMessage().contains("Capacidade do Reservatorio não pode ser < ou = 0")); |
There was a problem hiding this comment.
< e = são claros para desenvolvedores, mas se essa mensagem vai para o usuário final é uma boa utilizar as palavras menor e igual ao invés dos símbolos
Já que está é a última vez que refatoramos a maquina de café, tentei deixar o código o mais simples possível, e para conseguir fazer isso tive que refatorar tudo novamente, comecei aplicando o tdd, reaproveitei algumas ideias dos códigos antigos, mas achei esse bem melhor, também a alguns dias atrás eu fiz o curso de UML da alura, e tentei fazer alguns diagramas antes de começar a programar, me ajudou, mas no final o código ficou um pouco diferente do diagrama, vou deixar o link deles no final do comentário, sobre o design patterns, desde a 2ª vez que refatoramos a maquina, venho tentando aplicar algum deles, não sei se consegui, mas dessa vez tentei aplicar o strategy no método de comprar/preparar a bebida, também simplifiquei o método em comparação com as outras versões.
link dos diagramas:
Caso de uso: https://drive.google.com/file/d/10w2y54jDmgNcM9eRcAP6AFkFmTdpYuG-/view?usp=sharing
Classes: https://drive.google.com/file/d/18wbIh2Eu63_01RgQEg0Qb1LrV60mUslq/view?usp=sharing