Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como instanciar o imposto sem recorrer a if's

A estratégia mostrada durante a aula é muito boa, porém em alguma hora alguém terá que instanciar uma classe de imposto e passar para o Calculador de Impostos junto com o orçamento. A partir disso me veio a dúvida, como fazer isso sem recorrer a if's e comparação? Porque na aula foi simplesmente o utilizado o método main e os impostos foram passados "na mão". Como proceder em casos onde estaríamos em um contexto web, ou uma aplicação desktop, ou ainda uma rotina de cálculo em segundo plano, e não há uma relação entre orçamento e imposto no banco de dados.

Segue demonstração do casos acima em um contexto Web (o contexto desktop seria quase a mesma coisa).

Estamos em uma página web, o usuário cadastra o orçamento em um formulário e seleciona o tipo de imposto em um campo "select". Imagine que não há banco de dados. O servidor deveria percorrer uma lista, que tenderia a crescer para sempre, comparar o imposto escolhido para poder criar a instância de imposto e associar a um orçamento.

No caso de uma rotina de segundo plano as coisas seriam meio diferentes:

Eu tenho um orçamento e um imposto, mas supomos que não estou em um banco de dados, consequentemente não posso dispor da ajuda de uma ORM para o método getImposto(). Suponhamos que eu carregue esses dados de um .csv ainda assim precisaria olhar para o imposto e percorrer uma cadeia de if's para decidir qual instanciar.

E mais um agravante, em nenhum dos casos acima posso utilizar metaprogramação (Reflection).

Difícil? Sim kk, mas por favor me matem essa dúvida, porque para mim é impossível.

1 resposta
solução!

Oi Felipe! Tudo bem?

O imposto é realmente um tem que preocupa, ainda mais no Brasil que tem um sistema tributário tão complexo. Impostos se pagam quando compra um produto, outros quando vende, uns incidem em um produto apenas outros no pedido inteiro. Isso é realmente um pesadelo para o desenvolvedor.

Por isso se recorre ao padrão strategy, que deve vir seguido de uma utilização de reflection no java puro, ou um beanName no spring (minha preferencia).

Não entendi seu comentário a não ter um ORM. Você usa ao menos algum banco, mesmo que sem ORM? Os impostos vem de um CSV? Não seria o caso de carregar os impostos no seu sistema e evitar de precisar ler arquivos?

Na verdade o strategy não vem para devolver um valor pronto. Isso você faz facilmente sem o uso de strategies. O strategy permite trocar a implementação, ou seja, a forma de calcular, baseada em definições e implementação.

Espero ter ajudado,

Abraço e sucesso!

Rodrigo