Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Solid com C#, Aula 1, vídeo 3

Na aula de Solid com C#, Aula 1, Vídeo 3, a calculadora tem uma lógica para identificar a regra de cálculo de acordo com o cargo. Cada cargo tem uma regra de cálculo fixa.

Como isso não é responsabilidade da calculadora, o instrutor cria um construtor no cargo para receber a regra de cálculo. Pela coesão a calculadora não deve ser alterada caso crie uma regra de cálculo nova ou cargo novo venha a ser criado, até ai tudo bem. Porém a solução do instrutor não deixou apenas a calculadora mais coesa, ele excluiu uma regra de negócio da aplicação. Agora a calculadora não é mais responsável por saber qual regra para cada cálculo, o responsável é o desenvolvedor que na hora de criar o cargo passa a regra.

Por exemplo, o dev pode instanciar um Dba com regra de cálculo DezOuVinteProcento, coisa que não poderia ser feita antes da alteração, pois a regra de negócio não permitia.

A alteração correta não seria por exemplo, na classe abstrata Cargo obrigar que cada filho tenha uma regra fixa e não recebendo pelo construtor?

Obrigado, Vinicius

2 respostas
solução

Oi Vinicius, se não estou enganado, já estudamos juntos aqui na Caelum :). Entendo o que você diz e acho que concordo :). Uma alternativa seria a classe abstrata ter um método abstrato que devolve a lógica de calculo para cada cargo, será que resolve?

Uma outra opção é deixar o construtor com visibilidade de pacote(sou do java) e criar uma fabrica que instancia os objetos corretamente, dada suas restrições.

Acho que eu iria no primeiro para ver como ficaria a solução.

Fala Alberto, sou em mesmo, era algum curso de Java! Estou experimentando a Alura, e gostando, porque na empresa somos muito desatualizados, ainda estou boa parte programando VB6 e ASP clássico hehehe... Espero que esteja tudo bem ai, fora estar trabalhando no feriado! :-)

A primeira solução funciona bem. Eu "resolvi" de forma parecida, transformando Cargo em interface, pois a era uma classe abstrata vazia. Assim obriguei cada implementação de cargo a criar um método que devolve uma lógica de cálculo fixa.

Valeu pelo retorno!!!