Ваш первый вариант
public int favoriteRestaurantId { get; set; }
имеет смысл, только если вас интересует только id
, а не другие атрибуты (name
) объекта restaurant
.В противном случае вам понадобится некоторый внешний контейнер, в котором хранятся все restaurant
объекты, и вам придется искать в контейнере restaurant
с указанным id
.
Во втором варианте
public Restaurant favoriteRestaurant { get; set; }
если вы напишите
someUser.favouriteRestaurant = someRestaurant;
, это также сохранит ссылку на существующий someRestaurant
.Это не скопирует весь объект.по крайней мере, не в таких языках, как C # и Java.
Только если вы сделаете что-то вроде
someUser.favouriteRestaurant = new Restaurant(someRestaurant);
, user
будет иметь собственную копию объекта restaurant
.
В некоторых случаях это имеет смысл, но в вашем примере это, вероятно, не очень хорошая идея по двум причинам:
Если, например, name
из someRestaurant
изменения, это также должно изменить имя favouriteRestaurant
.Это не произойдет автоматически, если favouriteRestaurant
является копией.
Это пустая трата памяти.