Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Duvida em relação à implementação do método getTotal

Boa noite.

Ao assistir o video da aula 13, atividade 03, percebi que é criado um método getTotal na classe Carrinho e um getTotal na classe ItemCarrinho. Me pergunto se não seria mais pratico e, talvez, mais intuitivo, calcular este valor diretamente na classe Carrinho, visto que o carrinho já conhece a quantidade total dos itens e o seu próprio valor total (soma do preço de todos os itens que estão no carrinho).

O código da aula esta assim:

Classe Carrinho:

public BigDecimal getTotal(CarrinhoItem item){
    return item.getTotal(getQuantidade(item));
}

Classe CarrinhoItem

public BigDecimal getTotal(int quantidade) {
    return this.getPreco().multiply(new BigDecimal(quantidade));
}

Eu implementei assim

Classe Carrinho:

public BigDecimal getTotalItem(ItemCart item) {
        return item.getPrice().multiply(new BigDecimal(this.getQuantity(item)));

    }

Estou deixando de notar algum padrão, boa pratica, etc? Sinceramente eu fiquei com a sensação de que estamos espalhando "código extra" pela aplicação, visto que o getTotal da classe Carrinho so passa a quantidade total de itens para o getTotal da Classe CarrinhoItem, que devolve esse valor calculado, ou seja, quem realmente sabe o valor total (quantidade x preço) de um determinado item que se encontra no carrinho é o Item do Carrinho, e não o Carrinho de compras, e isso me pareceu um pouco estranho.

Obrigado

4 respostas

Olá Carlos!

Você fez o teste adicionando um produto mais de uma vez no carrinho pra ver se ele imprime o mesmo resultado?

Acredito que exista esse getTotal na classe CarrinhoItem justamente para pegar a quantidade que existe de um mesmo produto para aí sim fazer a conta final.

Tenta fazer esse teste e me fala o que deu.

Aguardo seu retorno!

Oi Guilherme, boa tarde!

Acabei de fazer o teste com a implementação que eu fiz (adicionando um produto mais de uma vez no carrinho) e o resultado esta funcionando conforme deveria.

Fiquei com duvida nesta implementação do video, pois o não seria o Carrinho o responsável por saber o valor total de um determinado item que esta nele, assim como o valor total do carrinho (soma do valor total de todos os itens)? Ainda estou começando a programar, então esse tipo de abordagem ainda não esta bem clara para mim, sinto que estou deixando passar alguma informação despercebida.

solução!

Ah massa, pensei que poderia dar errado o teste.

Sobre as responsabilidades isso varia muito, quando estamos construindo um sistema sozinhos geralmente podemos escolher qual caminho seguir. Mas quando estamos em equipe o ideal é buscar um código que seja divida as responsabilidades para que, assim, seja mais fácil de dar manutenção ou aplicar alguma alteração caso alguma regra seja mudada.

Por exemplo, se surgisse uma promoção por quantidade de produto comprado? (Aquele famoso leve 2 por 1). Seria interessante que essa lógica ficasse separada do carrinho. Ela teria que ficar entre o item e o carrinho de maneira que ela saberá quantos items tem e saberá qual o desconto a ser aplicado. Logo em seguida passará valor total daqueles items para o carrinho.

Não sei se deu pra entender mas se não tiver entendido pode falar que tento explicar de outra maneira!

Excelente, as vezes é difícil enxergar certas coisas quando estamos construindo um programa sozinhos (justamente porque temos que pensar em tudo sozinhos haha). Sua explicação ficou muito clara sim, eu sabia que eu estava deixando algo passar despercebido, só não estava encontrando o que era haha.

Mais uma vez, muito obrigado Tadeu.

Duvida resolvida, podem fechar o tópico.

Abraço