Кратность полюсов ассоциации. Различие 1--1 и 1--0..1(Прочитано 9538 раз)
Коллеги, добрый вечер!

Раньше не предавал этому большого значения и старался всегда использовать связи 1--0..1 между классами вместо 1--1. Сейчас же решил разобраться в отличии этих видов ассоциаций, но, к сожалению, не смог обнаружить чёткого ответа на возникший вопрос. Прошу помочь.

Насколько я понимаю "1" возле одного класса говорит о том, что перед созданием второго класса уже должен быть создан объект первого. "0..1" не устанавливает такого требования, то есть при создании объекта второго класса объект первого класса может не существовать. Таким образом никаких вопросов по сути связи "1--0..1" у меня не возникает.
Вопрос возникает когда я пытаюсь осмыслисть связь "1--1". Насколько я понимаю объект первого класса не может быть создан без существующего объекта второго класса. Аналогичное правило действует и в обратном направлении. Вопросы такие:
  • Как тогда можно создать объект одного из классов если они не могут "жить" друг без друга?
  • Как трактовать связь "1--1" с однонаправленной ассоциацией? Как это будет выглядеть в коде приложения?



Насколько я понимаю "1" возле одного класса говорит о том, что перед созданием второго класса уже должен быть создан объект первого.

Я бы не рекомендовал искать в модели ER подскази по порядку создания объектов. Она все-таки про другое.

Вопрос возникает когда я пытаюсь осмыслисть связь "1--1". Насколько я понимаю объект первого класса не может быть создан без существующего объекта второго класса.

Правильнее будет "не может существовать".

  • Как тогда можно создать объект одного из классов если они не могут "жить" друг без друга?
...
[/list]

0. Во многих случаях этот вопрос просто не возникает, поскольку логические объекты "1:1" реализуются в одном физическом объекте. Например, в одной строке БД или одной XML-ке. Это когда процесс позволяет.

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

2. Если процессы устроены так, что данные для нужных объектов поступают совсем не одновременно, можно использовать механизмы состояний. Создаем один (любой) из объектов и объявляем его "черновиком" вплоть до момента, когда всё остальное будет добавлено и связано как положено.



Спасибо. Вопрос закрыт:)



Как тогда можно создать объект одного из классов если они не могут "жить" друг без друга?

Я, как бывший программист C++, всегда понимал это буквально.

При отношении 1--1 объект второго класса создаётся в конструкторе первого. Или объявлен как его атрибут.

При отношении 1--0..1 объект второго класса может создаваться в runtime, когда в нём возникает необходимость. А может и не создаваться. Обычно первый класс в этом случае содержит указатель на объект второго.
greesha.ru

Реальность - это убийство прекрасной теории бандой мерзких фактов. (Роберт Гласс)




 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19