Pessoal vi em outro tópico uma dúvida sobre a perda de responsabilidade no código que as alterações causaram. Pois no primeiro momento o programador conseguia ver que para um desenvolvedor se aplicava a regra "DezOuVinte", após as alterações o programador é quem deverá "saber" e passar a regra a ser usada...
Eu fiz algumas alterações com base em outro tópico e gostaria de opiniões...
Eu criei a interface IRegraDeCalculo como mencionado na aula e as regras.
public interface IRegraCalculo
{
double Calcula(Funcionario funcionario);
}
class DezOuVinte : IRegraCalculo
{
public double Calcula(Funcionario funcionario)
{
if (funcionario.SalarioBase > 3000.0)
{
return funcionario.SalarioBase * 0.8;
}
else
{
return funcionario.SalarioBase * 0.9;
}
}
}
Porém transformei a classe abstrata Cargo em uma interface ICargo que implementa o metodo RegraCalculo
public interface ICargo
{
IRegraCalculo RegraCalculo();
}
class Desenvolvedor : ICargo
{
public IRegraCalculo RegraCalculo()
{
return new DezOuVinte();
}
}
A classe funcionário agora deve receber uma um "ICargo" e a classe calculadora...
public class Funcionario
{
public ICargo Cargo { get; private set; }
public double SalarioBase { get; private set; }
public Funcionario(ICargo cargo, double salarioBase)
{
this.Cargo = cargo;
this.SalarioBase = salarioBase;
}
}
public class CalculadoraDeSalario
{
public double Calcula(Funcionario funcionario)
{
return funcionario.Cargo.RegraCalculo().Calcula(funcionario);
}
}
Uma coisa que fiquei na dúvida, é uma boa prática eu criar uma interface que implemente um método que tenha como retorno uma outra interface?
Marcelo