Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Resolução] Faça como eu fiz: validação de saque

ContaBancaria.cs

internal class ContaBancaria(string titular, double saldoInicial)
{
    private double _saldo = saldoInicial;
    public string Titular { get; } = titular;
    public double Saldo => _saldo;
    public void Sacar(double valor)
    {
        if (!SegurancaConta.ValidarSaque(valor))
        {
            Console.WriteLine("Saque negado pela política de segurança.");
            return;
        }

        if (valor > _saldo)
        {
            Console.WriteLine("Saque não realizado por saldo insuficiente.");
            return;
        }
        
        _saldo -= valor;
        Console.WriteLine("Saque realizado com sucesso.");
    }
}

SegurancaConta.cs

internal static class SegurancaConta
{
    public static readonly double _valorMaxSaque = 1000;
    public static bool ValidarSaque(double valor)
        => valor > 0 && valor <= _valorMaxSaque;
}

Program.cs

ContaBancaria conta = new("Carlos Silva", 2500);
conta.Sacar(1500);   // inválido  -  acima do limíte permitido
conta.Sacar(-50);    // inválido  -  valor negativo
conta.Sacar(1000);   // válido    -  saldo agora é R$ 1500
conta.Sacar(1000);   // válido    -  saldo agora é R$ 500
conta.Sacar(1000);   // inválido  -  saldo insuficiente
conta.Sacar(200);    // inválido  -  saldo agora é R$300
Console.WriteLine($"Saldo atual: {conta.Saldo:C}");
2 respostas
solução!

Oii, Gerson.

A sua resolução mostra um amadurecimento interessante no uso de C#, aplicando recursos que tornam o código mais enxuto e profissional. Você adicionou camadas de proteção que evitam erros comuns, como tentar sacar valores negativos ou gastar o que não tem.

  • Primary constructors: Você utilizou a sintaxe internal class ContaBancaria(string titular, double saldoInicial), que é uma forma moderna e limpa de definir o construtor e já inicializar os campos.
  • Membros Expression-bodied: O uso de => para a propriedade Saldo e para o método ValidarSaque deixa o código menos verboso e mais fácil de ler.
  • Uso de static na segurança: Transformar a SegurancaConta em uma classe estática foi uma decisão inteligente. Como a regra de validação não depende de dados específicos de uma instância (como o histórico do cliente), não há necessidade de dar um new SegurancaConta() toda vez que for sacar.

O caminho que você tomou de separar a responsabilidade da segurança em uma classe estática é muito comum em padrões de design que buscam centralizar regras de negócio que não mudam de estado.

Continue firme nos estudos.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Vlw Lorena,
Muito obrigado pelo feedback e pelo link sobre classes estáticas!