[Comentário](http://robsoncastilho.wordpress.com/2013/02/06/principios-solid-principio-da-responsabilidade-unica-srp/#comment-7186) Se obviamente toda Venda pertence a um Cliente, a venda deve ter uma referência ao cliente. Para saber se o cliente é diferenciado, a classe Cliente deve possuir uma propriedade nos dê essa informação. Para calcular…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Cliente { | |
public int Id { get; set; } | |
public bool IsClienteDiferenciado { get; set; } | |
// outras informações ... omitido para brevidade | |
} | |
public class Venda { | |
public int Id { get;set; } | |
public Cliente Cliente { get; set; } //referencia ao cliente | |
public decimal Valor { get; set; } //valor atual da venda | |
public decimal Desconto { get; set; } //valor do desconto - inicia com zero por padrão | |
//valor final calculado | |
public decimal ValorFinal { get; set; } | |
//construtor - passar o cliente referente à venda | |
public Venda(Cliente cliente) { | |
Cliente = cliente; | |
} | |
} | |
//classe utilitária relacionada às vendas | |
public static class VendaExtensions { | |
public static void AplicaDescontoSeNecessario(this Venda venda) { | |
if (venda == null) throw new Exception("não passou a venda ..."); | |
if (venda.Cliente == null) throw new Exception("passou uma venda sem cliente"); | |
//faz o calculo | |
decimal desconto = 0; | |
if (venda.Cliente.IsClienteDiferenciado) { | |
desconto = ... //calculo do desconto para cliente diferenciado | |
} else { | |
desconto = 0; //outro tipo de desconto ou nenhum | |
} | |
venda.Desconto = desconto; | |
venda.ValorFinal = venda.Valor - desconto; | |
} | |
} | |
//exemplo de uso: | |
//recupera o cliente do banco de dados | |
var cliente = new Cliente(); | |
//iniciar uma venda | |
var venda = new Venda(cliente); | |
venda.Valor = 456.78; | |
venda.AplicaDescontoSeNecessario(); //sintaxe utilizando extension Method | |
//VendaExtensions.AplicaDescontoSeNecessario(venda); //sintaxe tradicional | |
Console.Writeline(venda.ValorFinal); // irá imprimir o valor calculado |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment