Отношения «многие ко многим» становятся гораздо менее запутанными, если разбить их на части: отношения «принадлежит к» и «имеет много». Давайте использовать метафору стендапов, шоу и клубов. Для простоты на каждом шоу будет только один стенд (здесь нет разминки), и в каждом клубе будет только одно выступление в день.

Используя эту модель, было бы разумно сказать, что у стенда «много» шоу, а каждое отдельное шоу «принадлежит» только одному стенду. Давайте позвоним нашему стенд-апу Джо и будем давать ему по одному выступлению каждый вечер в эти выходные:

В клубе также «бывает много» шоу каждую неделю, и каждое шоу «принадлежит» этому клубу. В данном случае наш клуб называется Chuckle’s Comedy Club:

Эти простые отношения интуитивно понятны, но что, если их объединить?

Связи через шоу

Что связывает Джо с клубом? Шоу. Когда Джо дает представление в клубе, шоу принадлежит и Джо, и клубу. Их связывает событие. Это основа отношений «многие ко многим». Джо имеет «доступ» к клубу «через» каждое выступление и наоборот. Каждое шоу «принадлежит» Джо и одновременно «принадлежит» клубу.

Эти отношения часто изображаются линиями «куриных лапок» в более широких терминах:

Применение этого к коду

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

Чтобы смоделировать вышеуказанные отношения с кодом, нам потребуются классы StandUp, Show и Club. У каждого будут экземпляры, которые взаимодействуют друг с другом. Каждый объект класса Show будет принимать экземпляры классов StandUp и Club и связывать их следующим образом:

Чтобы увидеть, как работает этот код, давайте рассмотрим основы кодирования отношения« многие ко многим ».