Tengo un debate mental conmigo mismo cada vez que comienzo a trabajar en un nuevo proyecto y estoy diseñando mis POCO. He visto muchos tutoriales / ejemplos de código que parecen favorecer las asociaciones de claves externas :
Asociación de clave externa
public class Order
{
public int ID { get; set; }
public int CustomerID { get; set; } // <-- Customer ID
...
}
A diferencia de las asociaciones independientes :
Asociación independiente
public class Order
{
public int ID { get; set; }
public Customer Customer { get; set; } // <-- Customer object
...
}
He trabajado con NHibernate en el pasado y usé asociaciones independientes, que no solo se sienten más OO, sino que también (con carga diferida) tienen la ventaja de darme acceso a todo el objeto Cliente, en lugar de solo su ID. Esto me permite, por ejemplo, recuperar una instancia de Order y luego hacerlo Order.Customer.FirstName
sin tener que hacer una unión explícitamente, lo cual es extremadamente conveniente.
Entonces, para recapitular, mis preguntas son:
- ¿Existe alguna desventaja significativa en el uso de asociaciones independientes? y...
- Si no hay ninguna, ¿cuál sería la razón para utilizar asociaciones de claves externas?