Poderiam me explicar um pouco dessa aula ainda fiquei com duvida.
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.