Prowadzę ze sobą mentalną debatę za każdym razem, gdy zaczynam pracę nad nowym projektem i projektuję swoje POCO. Widziałem wiele samouczków / przykładów kodu, które wydają się faworyzować skojarzenia kluczy obcych :
Skojarzenie klucza obcego
public class Order
{
public int ID { get; set; }
public int CustomerID { get; set; } // <-- Customer ID
...
}
W przeciwieństwie do niezależnych stowarzyszeń :
Niezależne stowarzyszenie
public class Order
{
public int ID { get; set; }
public Customer Customer { get; set; } // <-- Customer object
...
}
W przeszłości pracowałem z NHibernate i korzystałem z niezależnych skojarzeń, które nie tylko sprawiają wrażenie bardziej OO, ale także (z leniwym ładowaniem) mają tę zaletę, że dają mi dostęp do całego obiektu klienta, zamiast tylko jego identyfikatora. Pozwala mi to na przykład pobrać instancję Order, a następnie zrobić to Order.Customer.FirstName
bez konieczności jawnego łączenia, co jest niezwykle wygodne.
Podsumowując, moje pytania to:
- Czy są jakieś istotne wady korzystania z niezależnych stowarzyszeń? i...
- Jeśli ich nie ma, jaki byłby w ogóle powód używania skojarzeń kluczy obcych?