DDD Советы относительно связанных объектов (C #) - PullRequest
0 голосов
/ 17 ноября 2009

Я нахожусь на заборе по этому вопросу. Лучше ли держать коллекцию идентификаторов, связанных с объектом или коллекцию объектных отношений. Я планирую использовать подход репозитория также. Вот что я имею в виду:

public class Person
{
     string PersonName {get; set;}
     List<PersonFriend> PersonFriends {get; set;}
{

or...

public class Person
{
     string PersonName {get; set;}
     List<int> PersonFriendIds {get; set;}
{

Ответы [ 2 ]

5 голосов
/ 17 ноября 2009

Обычно лучше пойти с объектными отношениями. Таким образом, вы не заставляете другие классы, использующие список PersonFriends, знать обо всем, что происходит в хранилище, что дает вам более четкое разделение логики домена и кода доступа к данным.

Если вы не хотите, чтобы полная коллекция друзей загружалась в память, вам, вероятно, лучше вообще не указывать классу PersonFriends список класса Person и просто реализовывать метод GetFriendsFor (Person person) в хранилище.

Другим решением будет использование ORM, который поддерживает отложенную загрузку, чтобы дать вам возможность загружать список друзей по требованию.

3 голосов
/ 17 ноября 2009

Как и во всех великих начинаниях по программированию, я считаю, что ответ в конечном итоге будет "это зависит", исходя из ряда факторов в вашей среде.

Однако мне очень, очень не нравится выставлять идентификаторы (которые, как в вашем примере, int s) из моего уровня доступа к данным / ORM. Поэтому, если все остальные факторы равны, я бы предпочел первый пример.

Теперь я также скажу, что вы никогда не хотите включать этот установщик на PersonFriends public. Ваш DAL / ORM должен заполнять резервное хранилище, и вызывающие клиенты должны иметь возможность получить только версию этого списка только для чтения.

...