public class LimiteDeSaldo { private decimal disponivel; private decimal concedido; private decimal margemDeCredito; public LimiteDeSaldo(decimal disponivel, decimal concedido, decimal margemDeCredito) { this.disponivel = disponivel; this.concedido = concedido; this.margemDeCredito = margemDeCredito; } public void Debita(decimal valor) { if(PossuiDisponibilidade(valor)) disponivel -= valor; else throw new LimiteDeSaldoDisponivelInsuficienteException(disponivel); } public void DebitaSemVerificarDisponibilidade(decimal valorSolicitado) { disponivel -= valor; } public bool PossuiDisponibilidade(decimal valorSolicitado) { return ValorDisponivel >= valorSolicitado; } public decimal ValorDisponivel { get { return Math.Round(disponivel * (margemDeCredito + 1), MidpointRounding.AwayFromZero); } } }