Minha dúvida é a seguinte: o metodo add() do CarrinhoComprasController recebe o id de um produto e um tipo de preço, e faz a logica de relacionar o produto com o preço usando o CarrinhoItem ... Não seria melhor passar um produto pro metodo add? Já que quando redirecionamos o usuario para a tela de detalhe, já passamos um produto e seus preços como atributo, assim daria pra fazer uma classe a menos (CarrinhoItem), e ainda seria uma query a menos na hora de adicionar o produto no carrinho, o que poderia melhorar a perfomance do site.
Digo isso porque foi a primeira coisa que veio na minha cabeça, mas não sei se tem alguma explicação pra fazermos isso usando o id e o CarrinhoItem, não sei se é algo relacionado a Design patterns, que é algo que eu não conheço muito