У мене є душевна дискусія із самим собою щоразу, коли я починаю працювати над новим проектом і розробляю свої POCO. Я бачив багато навчальних посібників / зразків коду, які здаються прихильними до іноземних ключових асоціацій :
Асоціація іноземних ключів
public class Order
{
public int ID { get; set; }
public int CustomerID { get; set; } // <-- Customer ID
...
}
На відміну від незалежних асоціацій :
Незалежна асоціація
public class Order
{
public int ID { get; set; }
public Customer Customer { get; set; } // <-- Customer object
...
}
Я працював з NHibernate в минулому, і використовував незалежні асоціації, які не тільки відчувають себе більше OO, але і (з ледачим завантаженням) мають перевагу в наданні мені доступу до всього об'єкта Клієнта, а не лише до його ідентифікатора. Це дозволяє мені, наприклад, отримати екземпляр Order, а потім зробити Order.Customer.FirstName
без явного виконання з'єднання, що надзвичайно зручно.
Отже, підводячи підсумки, мої запитання:
- Чи є суттєві недоліки у використанні незалежних асоціацій? і ...
- Якщо таких немає, то що було б причиною взагалі використання іноземних ключових асоціацій?