У меня есть умственные дебаты с самим собой каждый раз, когда я начинаю работать над новым проектом, и я разрабатываю свои POCOs. Я видел много примеров учебников/кодов, которые, похоже, предпочитают ассоциации с внешними ключами:
Ассоциация внешних ключей
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, но и (с ленивой загрузкой) имеют то преимущество, что дают мне доступ ко всему объекту Customer, а не только его идентификатору. Это позволяет мне, например, получить экземпляр заказа, а затем сделать Order.Customer.FirstName
без необходимости делать явное соединение, что очень удобно.
Итак, чтобы повторить, мои вопросы:
- Есть ли существенные недостатки в используя независимые ассоциации? и...
- Если нет, то что будет ли причиной использования ассоциаций внешних ключей вообще?