1
resposta

[Projeto] Desafio: Hora da prática pt2

  1. Modificar as classes Artista e Filme do namespace Alura.Filmes para que elas
    sejam consistentes uma com a outra, ou seja, sempre que for adicionado um artista
    a um filme, terá de ser adicionado também o filme à lista de filmes do artista.
namespace Alura.Filmes;

class Filme
{
    private int duracao;
    public List<Artista> Elenco { get; set; }
    public string Titulo { get; set; }
    public int Duracao
    {
        get => duracao;
        set
        {
            if (value < 0)
            {
                duracao = 0;
            }
            else
            {
                duracao = value;
            }
        }
    }

    public Filme(string titulo, int duracao, List<Artista> elenco)
    {
        if (elenco == null)
        {
            Elenco = new List<Artista>();
        }
        else
        {
            Elenco = elenco;
            foreach (var artista in Elenco)
            {
                artista.AdicionarFilme(this);
            }
        }

        Titulo = titulo;
        Duracao = duracao;
    }

    public void AdicionarElenco(Artista artista)
    {
        Elenco.Add(artista);
        if (!artista.FilmesAtuados.Contains(this))
        {
            artista.AdicionarFilme(this);
        }
        Console.WriteLine($"{artista} adicionado/a ao elenco.");
    }

    public void ExibirElenco()
    {
        if (Elenco.Count == 0)
        {
            Console.WriteLine("O Elenco está vazio.");
        }
        else
        {
            var ListaOrdenada = Elenco.OrderBy(ator => ator).ToList();
            Console.WriteLine("Lista do Elenco:");
            foreach (var ator in ListaOrdenada)
            {
                Console.WriteLine($"-{ator}");
            }
        }
    }
}

namespace Alura.Filmes;


class Artista
{
    public string Nome { get; set; }
    public int Idade { get; set; }
    public List<Filme> FilmesAtuados { get; set; }
    public int QuantidadeDeFilmes => FilmesAtuados.Count;


    public Artista(string nome, int idade)
    {
        Nome = nome;
        Idade = idade;
        FilmesAtuados = new List<Filme>();
    }

    public void AdicionarFilme(Filme filme)
    {
        FilmesAtuados.Add(filme);
        if (!filme.Elenco.Contains(this))
        {
            filme.AdicionarElenco(this);
        }
    }


    public void MostrarFilmesAtuados()
    {

        if (this.FilmesAtuados.Count == 0)
        {
            Console.WriteLine($"Nenhum filme encontrado na base para {this.Nome}");
            return;
        }

        Console.WriteLine($"Filmes de {this.Nome}:");
        foreach (var filme in FilmesAtuados)
        {
            Console.WriteLine($"Filme: {filme.Titulo}");
        }
        Console.WriteLine($"A quantidade de filmes total é: {QuantidadeDeFilmes}");
    }
}
1 resposta

Oi, Christopher! Como vai?

Agradeço por compartilhar.

Sua solução está bem alinhada com o desafio, pois você cuidou da consistência entre Filme e Artista ao atualizar as duas listas quando um vínculo é criado. Um ponto importante é evitar duplicidades: no método AdicionarFilme, antes de fazer FilmesAtuados.Add(filme), vale verificar se esse filme já não está na lista.

Dica: adicione uma validação antes de inserir o filme ou artista nas listas, usando Contains, assim você evita registros repetidos e mantém a relação entre as classes mais segura.

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