Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
[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…
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
You can’t perform that action at this time.