[quote=Andre Brito]Olhe.
A minha opinião para a sua primeira pergunta: a primeira abordagem. Isso é injetar, não é?
Agora uma pergunta: você vai usar save, delete, update na classe Produto? Digo, produto.save() ou algo do tipo? Se sim, eu desaconselho a usar isso (pode ser chamado de ActiveRecord e funciona perfeitamente com Rails, mas com Java acho que não casa).
A minha opinião para o seu problema: eu colocaria isso de calcular o preço em todas as condições em uma outra classe. Alguma classe que juntasse os dois, Produto e CondicaoDePagamento (pode ser Sacola será?). Porque pense: qual a relação de um com outro? Digo… Usar produto.calcularValorDoProdutoNaFormaDeBoleto(), produto.calcularValorDoProdutoNaFormaDeMasterCard(), … pode ficar muito pouco flexível. E se surge um cartão, JavaCardMasterSuperMoney? Você tem que alterar em produto e isso pode não ser tão interessante.
O que você poderia fazer é criar uma nova classe que armazena os preços (isso já pode ficar em ItemSacola, que pode ter uma referência pra produto. Aí Sacola calcula os preços de acordo com Condicao e seta em ItemSacola). Então você passa pelo for de todas as CondicoesDePagamento possíveis e vai criando objetos dinamicamente. Você nunca mais vai precisar se preocupar em implementar novos métodos, porque todo o cálculo vai ser baseado nas propriedades de CondicaoDePagamento.
Será que pode ser feito assim? Será que vai ficar acoplado demais? Só pegando outras opiniões e detonando essa arquitetura pra ver qual forma fica mais interessante. De qualquer forma, vamos esperar a opinião dos mais experientes, certo?[/quote]
}
Na verdade a funcionalidade é feita antes do Produto ser colocado na sacola, além disso eu nao me acopla a nenhum Portador especifico como voce disse, o que eu faço é recuperar todas as COndicoes com numero de parcelas menor ou igual a configurada no produto entao faco um for nestas condicoes e chamo um metodo da classe CondicaoPagamento chamado :
calculaValorParcelaParaTotal(Number total)
Onde se tiver juros ela ja aplica e juros e divide pela sua quantidade de parcelas, depois o que faço é agrupar isso para todos os portadores,com excecao dos que sao vendidos somente avista como boleto, e quem me diz isso e a propria classe Portador atraves de um metodo
boolean isSomenteAVista();
Acesse www.crisroli.com.br, é um de nossos clientes de e-commerce, clique em um produto e veja na parte de baixo a funcionalidade da qual falei.
Valeu
Obs: