Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema com Design do projeto

Com base no curso, estou desenvolvendo uma API para cadastro de livros , onde posso cadastrar livros lidos para o Usuário logado, mas usei a mesmo estrutura do curso onde tenho um projeto para usuário e outro para models onde está a classe livro, porem preciso fazer a ligação de livros com usuários para que o entity faça a chave estrangeira .

Para fazer isso precisaria vincular um projeto no outro, mas estou tomando um erro de referencia circular, as classes ficariam assim.

public class Livro
{
    public string Titulo {get; set;}
    public string Descricao {get; set;}
    public string UsuarioId {get; set;}
    public Usuario Usuario {get; set;} 
}

public class Usuario : IdentityUser
{
    public List<Livro> Livros {get; set;}
}

Existe alguma forma de fazer isso mantendo essa estrutura de projetos sem tomar referencia circular ou só jogando a classe de livros e usuários no mesmo projeto ?

Se puder indicar um curso aqui na Alura ou Material falando sobre estruturas de projeto me ajudaria muito também.

1 resposta
solução!

Fala, Leonardo, tudo bem?

Estou entendendo que você tem duas class libraries, uma com o modelo de livros, outra com o modelo de contas de usuário. Confirma o meu entendimento, pf.

Sendo assim realmente vai acontecer referência circular quando tentar criar propriedades de navegação em cada ponta do relacionamento.

Uma idéia é você escolher um dos lados para manter a navegação. Qual a consulta mais comum que irá executar? Pegar todos os livros de um usuário? Então é no Livro que irá manter sua propriedade de navegação. Desse modo um modelo de usuário serve apenas para representar a credencial de acesso ao sistema.

Sobre estrutura de projetos pesquisa pelos termos Clean Architecture AspNet Core. Os resultados têm algumas idéias interessantes, por exemplo:

Espero que tenha ajudado. Se quiser trocar idéia sobre isso é só falar. Abs

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software