1
resposta

[Projeto] Faça como eu fiz: criando mais classes - Usuário

No projeto deste curso decidi implementar uma nova classe Usuário, percebi que nas aulas foi idealizado as musicas estarem disponiveis no plano do usuário logado, pensando nisso implementei enums com os planos disponíveis e uma comparação diretamente na classe Musica do plano do usuário vs plano da musica.

Duvida: Fiquei em duvida se os Enum poderiam ser colocados em uma classe específica para isso (No dia a dia faz sentido?) ou poderia deixa-los "Jogados" no arquivo de código, falta implementar também para a classe Álbum.

Classe Usuário com Enums

class Usuario
{
    public Usuario(string nome, Plano plano)
    {
        Nome = nome;
        PlanoUsuario = plano;
    }
    public string Nome { get; }
    
    public Plano PlanoUsuario { get; }

}

public enum Plano
{
    Silver = 1,
    Gold = 2,
    Platinum = 3,
}

Classe Musica com a Lógica utilizada

class Musica
{
    public Musica(Banda artista, Plano plano, string nome, Genero genero)
    {
        Artista = artista;
        Nome = nome;
        PlanoMusica = plano;
        Genero = genero;
    }

    public string Nome { get; }
    public Banda Artista { get; }
    public Plano PlanoMusica { get; }
    public int Duracao { get; set; }
    public string DescricaoResumida => $"A música {Nome} é do Artista: {Artista}\n";
    public Genero Genero { get; }


    public void ExibirInformacoes(Usuario usuario)
    {

        if(usuario.PlanoUsuario >= PlanoMusica)
        {
            Console.WriteLine($"Nome: {Nome}");
            Console.WriteLine($"Artista: {Artista.Nome}");
            Console.WriteLine($"Duração: {Duracao}(m)");
            Console.WriteLine($"Gênero: {Genero.Nome}");
            Console.WriteLine($"Disponível no Plano: {PlanoMusica}");
        }
        else
        {
            Console.WriteLine($"A música '{Nome}' do artista '{Artista.Nome}' não está disponivel no seu plano: {usuario.PlanoUsuario}");
        }
    }
}

Arquivo Program.cs

Genero heavyMetal = new Genero("Heavy Metal");

Banda guns = new Banda("Guns N' Roses");

Usuario usuario = new Usuario("Álvaro",Plano.Gold);

Musica musica1 = new Musica(guns, Plano.Gold, "Civil War", heavyMetal)
{
    Duracao = 3
};

Musica musica2 = new Musica(guns, Plano.Platinum, "November Rain", heavyMetal)
{
    Duracao = 7
};

musica1.ExibirInformacoes(usuario);
musica2.ExibirInformacoes(usuario);
1 resposta

Oi, Álvaro! Como vai?

Achei bem interessante como você modelou a regra de negócio, comparando o plano do usuário com o da música usando enum. Isso mostra uma boa aplicação de orientação a objetos e organização de permissões. Sobre sua dúvida: no dia a dia, faz sentido, sim, colocar enum em arquivos separados quando eles são reutilizados em várias classes, pois isso melhora a organização e manutenção do projeto.

Uma dica interessante para o futuro é utilizar o método Enum.CompareTo para deixar a comparação mais explícita:


Plano planoUsuario = Plano.Gold;
Plano planoMusica = Plano.Platinum;

if(planoUsuario.CompareTo(planoMusica) >= 0)
{
    Console.WriteLine("Acesso liberado");
}

Esse código compara dois valores de enum e retorna se um é maior, menor ou igual ao outro, ajudando a deixar a intencao mais clara.

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