Skip to content

Maquina de Café - Design Patterns#18

Open
Jand-S wants to merge 9 commits into
movimentocodar:mainfrom
Jand-S:design_patterns
Open

Maquina de Café - Design Patterns#18
Jand-S wants to merge 9 commits into
movimentocodar:mainfrom
Jand-S:design_patterns

Conversation

@Jand-S
Copy link
Copy Markdown

@Jand-S Jand-S commented Oct 26, 2021

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

Copy link
Copy Markdown
Collaborator

@gcestaro gcestaro left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Parabéns pela entrega! 👏

Deixei alguns comentários para melhorar mais


public class CafeFxLauncher {
public static void main(String[] args) {
Main.main(args);
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pq precisa dessa classe com método main tb?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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};
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

É 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());
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aqui vc poderia utilizar alguma ferramenta de log, como log4j ou slf4j

labelStatus.setText(e.getMessage());
}
}
//
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

evite deixar comentários pelo código

}
//
private void switchTipoDeposita(ActionEvent event) {
if (!btnDepositar.isVisible()) btnDepositar.setVisible(true);
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Para melhor legibilidade do código, usar sempre chaves e quebra de linhas em ifs é considerado uma boa prática

}

@Test
void jogarExceptionSacarCreditoComValorZero() {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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!"));
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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!"));
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aqui faz sentido Valor Invalido

aguaReservatorio.abastecer(50);
aguaReservatorio.usarAgua(300);
});
assertTrue(e.getMessage().contains("Valor Invalido"));
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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"));
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

< 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

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants