Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Sugestão] Minha solução. Preciso de opiniões e críticas

A resolução que escrevi ficou assim

namespace ScreenSound.Modelos;

internal class Avaliacao
{
    public Avaliacao(int nota)
    {
        if (nota <= 0) Nota = nota;
        if (nota >= 10) Nota = nota;
        Nota = nota;
    }

    public int Nota { get; }

    public static Avaliacao Parse(string texto)
    {
        int nota = int.Parse(texto);

        if (nota < 0)
        {
            return new Avaliacao(0);
        }
        else if (nota > 10)
        {
            return new Avaliacao(10);
        }
        else
        {
            return new Avaliacao(nota);
        }
    }
}

Porém vendo o código de outras pessoas percebi que alguns estão com o código bem diferente um do outro, fiquei na dúvida se ja são experientes com a linguaguem ou se estudaram por outro meio. Caso tenham estudado por outro meio, gostaria de uma indicação de onde mais eu posso me aprofundar na linguagem.

1 resposta

Olá, Samuel. Tudo bem com você?

Obrigado por compartilhar sua solução e também sua reflexão sobre as diferentes abordagens que encontrou. Comparar implementações é uma excelente forma de aprender C#, principalmente quando o assunto é orientação a objetos e encapsulamento. No seu código existe apenas um ponto que merece atenção: no construtor, as condições if (nota <= 0) e if (nota >= 10) acabam não surtindo efeito, pois a linha Nota = nota; é executada logo em seguida e sobrescreve qualquer valor definido anteriormente. Dessa forma, uma nota menor que zero ou maior que dez continuará sendo armazenada sem a limitação esperada.

Uma alternativa seria concentrar essa validação diretamente no construtor, garantindo que qualquer objeto Avaliacao criado já esteja com um valor válido. Por exemplo, se nota < 0, armazenar 0; se nota > 10, armazenar 10; caso contrário, armazenar o valor recebido. Assim, mesmo que a classe seja instanciada por outros métodos além do Parse, a regra de negócio continuará sendo respeitada.

Sobre as diferenças entre as soluções, isso é bastante comum. Algumas pessoas já possuem experiência prévia, enquanto outras estudaram por livros, documentação oficial ou desenvolveram projetos pessoais. Para se aprofundar, vale explorar os recursos da Microsoft Learn, a documentação oficial do C# e praticar com pequenos projetos próprios, pois isso ajuda a entender diferentes formas de aplicar os mesmos conceitos.

Na sua opinião, qual abordagem faz mais sentido para manter a regra de validação centralizada e evitar que ela seja repetida em outros pontos da aplicação?

Parabéns pela iniciativa de comparar diferentes soluções e buscar evoluir na linguagem. Continue compartilhando suas dúvidas e descobertas, pois o fórum está à disposição para acompanhar seu aprendizado.

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