1
resposta

Uma maneira no qual eu construi um algoritmo para encontrar o álbum.

Eu queria tirar uma dúvida sobre como esse tipo de implementação é feita em sistemas reais e como é feito a modularização correta das funções, eu basicamente fiz uma função Get para pegar o álbum que corresponda ao nome do qual o usuário forneceu é implemento um foreach para varrer esse álbum o custo deste algoritmo seria linear pois irá realizar n comparações, minha dúvida é ? Como isso é implementado de fato no mercado ? Como eu prático e treino boas práticas de programação ? Uma função não pode ficar grande como essa no qual eu escrevi ?

public static Album VerificaAlbum( Dictionary<string, Banda> bandasRegistradas, string nomeBanda, string nomeAlbum ) { List albuns = bandasRegistradas[nomeBanda].GetAlbum(); foreach( Album album in albuns ) { if( album.Nome == nomeAlbum ) return album; } return null!; }

public override void Insere( Dictionary<string, Banda> bandasRegistradas ) { base.Insere( bandasRegistradas ); Menu.FormataOpcao( "Por favor, insira o nome da banda:" ); string nomeBanda = Console.ReadLine()!;

if( GerenciadorBandas.VerificaBanda( bandasRegistradas, nomeBanda ) )
{
    Console.WriteLine( $"Banda: {nomeBanda} encontrada!" );
    Menu.FormataOpcao( "Por favor, insira o nome do álbum:" );
    string nomeAlbum = Console.ReadLine()!;
    Album albumEncontrado = GerenciadorBandas.VerificaAlbum( bandasRegistradas, nomeBanda, nomeAlbum );
    Menu.FormataOpcao( "Por favor, insira a nota do álbum:" );
    int avaliacao = int.Parse( Console.ReadLine()! );
    albumEncontrado.InsereNota( new Avaliacao( avaliacao ) );
}
else
{
    Console.WriteLine( $"Banda: {nomeBanda} não encontrada!" );
}

}

1 resposta

Olá, Kayky. Tudo bem?

É ótimo ver seu interesse em entender como as implementações são feitas no mercado e como você pode melhorar suas práticas de programação. Vamos abordar suas dúvidas:

  1. Implementação em Sistemas Reais: No mercado, a modularização e a clareza do código são fundamentais. Em sistemas reais, é comum usar coleções e métodos mais eficientes para buscas, como LINQ em C#, que você já está usando. O uso de métodos como Any() e First() é uma prática comum para tornar o código mais legível.

  2. Modularização e Boas Práticas: A modularização é a chave para manter o código limpo e fácil de manter. Tente separar responsabilidades em métodos menores. Por exemplo, você pode ter um método apenas para verificar se o álbum existe e outro para inserir a nota. Isso ajuda a manter cada método focado em uma única tarefa.

  3. Complexidade do Código: Sobre a complexidade do seu método VerificaAlbum, é verdade que ele é linear, o que é aceitável para a maioria dos casos, especialmente se a lista não for muito grande. No entanto, para melhorar a legibilidade e manutenção, considere usar LINQ para tornar a busca mais direta, como mostrado no exemplo do contexto:

    public static Album? VerificaAlbum(Dictionary<string, Banda> bandasRegistradas, string nomeBanda, string nomeAlbum)
    {
        if (bandasRegistradas.TryGetValue(nomeBanda, out Banda banda))
        {
            return banda.Albuns.FirstOrDefault(a => a.Nome.Equals(nomeAlbum, StringComparison.OrdinalIgnoreCase));
        }
        return null;
    }
    

    Aqui, FirstOrDefault retorna o primeiro álbum que atende à condição ou null se nenhum for encontrado, tornando o código mais conciso.

  4. Praticando Boas Práticas: Continue praticando escrevendo código e revisando-o. Ferramentas de revisão de código e feedback de colegas mais experientes podem ser muito valiosos. Além disso, estudar padrões de design pode ajudar a estruturar melhor suas aplicações.

Espero ter ajudado e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!