Отношения «многие ко многим» становятся гораздо менее запутанными, если разбить их на части: отношения «принадлежит к» и «имеет много». Давайте использовать метафору стендапов, шоу и клубов. Для простоты на каждом шоу будет только один стенд (здесь нет разминки), и в каждом клубе будет только одно выступление в день.
Используя эту модель, было бы разумно сказать, что у стенда «много» шоу, а каждое отдельное шоу «принадлежит» только одному стенду. Давайте позвоним нашему стенд-апу Джо и будем давать ему по одному выступлению каждый вечер в эти выходные:
В клубе также «бывает много» шоу каждую неделю, и каждое шоу «принадлежит» этому клубу. В данном случае наш клуб называется Chuckle’s Comedy Club:
Эти простые отношения интуитивно понятны, но что, если их объединить?
Связи через шоу
Что связывает Джо с клубом? Шоу. Когда Джо дает представление в клубе, шоу принадлежит и Джо, и клубу. Их связывает событие. Это основа отношений «многие ко многим». Джо имеет «доступ» к клубу «через» каждое выступление и наоборот. Каждое шоу «принадлежит» Джо и одновременно «принадлежит» клубу.
Эти отношения часто изображаются линиями «куриных лапок» в более широких терминах:
Применение этого к коду
Отношения «многие ко многим» так важны для кода из-за их способности передавать объекты другим объектам как атрибуты. Таким образом, один объект может связать себя с любым другим объектом в цепочке и получить доступ к его методам и атрибутам.
Чтобы смоделировать вышеуказанные отношения с кодом, нам потребуются классы StandUp, Show и Club. У каждого будут экземпляры, которые взаимодействуют друг с другом. Каждый объект класса Show будет принимать экземпляры классов StandUp и Club и связывать их следующим образом:
Чтобы увидеть, как работает этот код, давайте рассмотрим основы кодирования отношения« многие ко многим ».