Tenho um debate mental comigo mesmo toda vez que começo a trabalhar em um novo projeto e estou criando meus POCOs. Tenho visto muitos tutoriais / exemplos de código que parecem favorecer associações de chave estrangeira :
Associação de chave estrangeira
public class Order
{
public int ID { get; set; }
public int CustomerID { get; set; } // <-- Customer ID
...
}
Ao contrário de associações independentes :
Associação independente
public class Order
{
public int ID { get; set; }
public Customer Customer { get; set; } // <-- Customer object
...
}
Já trabalhei com o NHibernate no passado e usei associações independentes, que não só parecem mais OO, mas também (com carregamento lento) têm a vantagem de me dar acesso a todo o objeto Cliente, em vez de apenas seu ID. Isso me permite, por exemplo, recuperar uma instância Order e, em seguida, fazer Order.Customer.FirstName
sem ter que fazer uma junção explicitamente, o que é extremamente conveniente.
Então, para recapitular, minhas perguntas são:
- Existem desvantagens significativas no uso de associações independentes? e...
- Se não houver nenhuma, qual seria a razão de usar associações de chave estrangeira?