Poderiam me explicar um pouco dessa aula ainda fiquei com duvida.
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!
Poderiam me explicar um pouco dessa aula ainda fiquei com duvida.
Olá, Levi.
Tudo bem?
Entendo que a aula sobre "Removendo o switch" pode ser um pouco densa, então vou tentar explicar de uma maneira mais clara.
A ideia principal dessa aula é refatorar o código para usar herança e polimorfismo, eliminando a necessidade de um grande bloco switch no arquivo Program.cs. Isso torna o código mais limpo e fácil de manter.
Criar um Método Virtual no Ancestral:
No arquivo Menu.cs, criamos um método Executar() que pode ser sobrescrito pelas classes descendentes. Usamos a palavra-chave virtual para indicar que esse método pode ser sobrescrito.
internal class Menu
{
public virtual void Executar(Dictionary<string, Banda> bandasRegistradas)
{
Console.Clear();
}
}
Sobrescrever o Método nas Classes Descendentes:
Nas classes descendentes, como MenuExibirDetalhes, usamos a palavra-chave override para sobrescrever o método Executar() do ancestral. Também usamos base.Executar(bandasRegistradas) para chamar o método do ancestral, garantindo que o Console.Clear() seja executado.
internal class MenuExibirDetalhes : Menu
{
public override void Executar(Dictionary<string, Banda> bandasRegistradas)
{
base.Executar(bandasRegistradas);
ExibirTituloDaOpcao("Exibir detalhes da banda");
// Resto do código...
}
}
Remover o Bloco Switch no Program.cs:
No arquivo Program.cs, substituímos o bloco switch por um dicionário que mapeia as opções do menu para instâncias das classes de menu. Isso elimina a necessidade de criar múltiplos objetos manualmente.
if (opcoes.ContainsKey(opcaoEscolhidaNumerica))
{
Menu menuASerExibido = opcoes[opcaoEscolhidaNumerica];
menuASerExibido.Executar(bandasRegistradas);
if (opcaoEscolhidaNumerica > 0) ExibirOpcoesDoMenu();
}
else
{
Console.WriteLine("Opção inválida");
}
Vamos supor que você queira exibir detalhes de uma banda. Antes, você teria um caso específico no switch para isso. Agora, com a refatoração, o código se torna mais simples e genérico:
Antes (com switch):
case 5:
MenuExibirDetalhes menu5 = new();
menu5.Executar(bandasRegistradas);
ExibirOpcoesDoMenu();
break;
Depois (com dicionário):
if (opcoes.ContainsKey(opcaoEscolhidaNumerica))
{
Menu menuASerExibido = opcoes[opcaoEscolhidaNumerica];
menuASerExibido.Executar(bandasRegistradas);
if (opcaoEscolhidaNumerica > 0) ExibirOpcoesDoMenu();
}
Com essas mudanças, o código fica mais organizado e fácil de entender. Cada menu específico trata apenas da sua própria lógica, enquanto a lógica comum é tratada na classe ancestral Menu.
Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.