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);