2009-06-09 2 views
2

Предположим, у вас есть два объекта: Person и Address, и у них есть отношения, то есть у человека есть адрес. Очевидно, что объект-человек имеет ссылку на объект-адрес, но действительно ли адресный объект должен знать об объекте Person? Что дает, что это должно быть двухсторонние отношения?Связь с объектами

Спасибо!

+0

Где вы узнаете, что адрес должен знать о объектах Person? Вы можете определенно просто иметь односторонние отношения ... если объект Address не должен знать, кто на нем живет. –

ответ

1

Все зависит от использования объектов. Если у вас есть ситуация, когда вы должны принять адрес и показать (или использовать) его лицо (или лиц), это будет двусторонняя связь. Но если вам никогда не нужно обращаться к человеку с адресом, тогда вам не понадобятся двусторонние отношения.

Другие примеры: если эти объекты связаны с таблицами базы данных, а в этой таблице есть отношение (например, Person.id == Address.IdPerson), тогда будет полезно иметь двухсторонние отношения в классах для вставок и обновлений ,

2

В этом случае, похоже, что ваш объект Address не должен иметь отношение к объекту Person.

Как правило, вы можете думать, нужно ли «знать» другого для работы. Человек должен знать свой адрес, а адрес не должен знать Лица, которому он принадлежит.

«нужно знать» здесь отражает необходимость взаимодействия с объектом в методе.

0

На мой взгляд, объект Address вообще не знает об объекте Person.
Если это так, то оно введет систему coupling.
Если вам нужно найти человека по его адресу, вы создаете коннектор Pepole, у которого есть метод поиска, который выполняет поиск по адресу.

0

Адрес не должен знать о существовании Человека, я думаю, что это не логика в реальном мире: адрес - это просто группа информации (например, улица, город и т. Д.), Ее можно использовать письмом или человеком, но в каждом случае он все еще остается тем, чем он является, не зная его окружения. Он должен заботиться только о строго связанной с ним информации.

1

Единственная ситуация, о которой я могу думать, было бы полезно, если бы у вас была внешняя ссылка на адрес, и вы хотели знать, кто там живет. Даже тогда, я думаю, что отдельная ассоциативная структура данных, которая отображает Address -> Person, будет лучшим дизайном.

Кроме того, в отношениях, которые вы описываете, нет причин, по которым это должно быть двусторонним отношением. Не существует правила, в котором говорится, что для адреса требуется ссылка на Лицо.

0

Что означает, что это должно быть двусторонним отношением ?

Единственное, что я могу придумать, что бы мотивация для адреса, чтобы узнать о других объектов будет, если вы находитесь в остро нуждается кэширования. Допустим, у вас есть какая-то форма приложения, где поиски выполняются все время. Но это в значительной степени.

1

Их способ подумать о том, что мой объект зависит от о собственности. Таким образом, в этом конкретном сценарии Person зависит на Адрес поэтому ему нужно знать о подробностях адреса.Адрес, с другой стороны, не зависит от от лица, следовательно, может существовать без знания Человека.

Если вам нужно получить доступ к человеку через адрес, я бы предложил реализовать функцию в объекте Address, которую вы можете вызвать, который будет получать Лицо (лица), относящееся к этому конкретному адресу.

James.

0

Сложность этой проблемы зависит от бизнес-домена и того, что вы подразумеваете под адресом. В большинстве систем это упрощается как объект-человек, который имеет отношение к адресному объекту, представляющему, где они находятся, и если два человека остаются на том же адресе, который они адресуют, будут дублированы.

Если вы хотите иметь более сложную модель реального мира, то рассмотрите возможность перехода к терминологии в местоположения (которые могут даже отображаться пространственно).

Соображение

  • Человек может быть связан с нулем или более мест (считают летние и зимние дома)
  • В местах существует независимо от наличия людей, связанных с ним
  • Если человек двигается домой рассмотреть изменяя отношение (привычное для жизни), а не местоположение. Это обеспечивает большую гибкость в будущем
  • Несколько человек могут быть связаны с одним и тем же местом. Это очень просто, чтобы найти всех, кто в настоящее время (или ранее) остался на месте.

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

0

В этом случае я бы начал с определения корневого объекта, который содержит список лиц и список адресов. Каждому человеку и адресу будет разрешен доступ к этому корневому (родительскому) объекту. Каждый объект Person также будет содержать ссылку на адрес. Для адреса, чтобы найти всех людей, живущих в этом месте, я бы пошел к корневому объекту и отфильтровал список Лица для всех лиц, которые ссылаются на этот адрес.

Но что, если человек живет по двум адресам? Или нет адреса? :-)

Кстати, если вы используете корневой/родительский класс, тогда вы можете создать базовый класс «Ребенок», который ссылается на «Родительский» и наследует «Лицо» и «Адрес» из этого дочернего класса.

Смежные вопросы