В общем, когда у вас есть отношение многие ко многим в вашей доменной модели, шаблоны доступа в вашем коде будут либо с одной стороны M2M, либо с другой ...
Например, Если у вас есть структура, содержащая людей, каждый из которых совершил несколько покупок в ваших торговых точках, вы, как правило, можете захотеть получить доступ к этим транзакциям через человека, а не через продукт. иными словами, вам, возможно, чаще захочется узнать, какие продукты приобрел конкретный человек, а не какие продукты приобрел конкретный продукт. Таким образом, в этом примере вы просто хотите, чтобы каждый класс person содержал свойство, представляющее собой набор продуктов. Не будет необходимости обращаться к классу персонажа через класс Product.
Другой, например, Если у вас есть структура, содержащая людей, каждый из которых подписывается на несколько журналов.
Теперь, если вы являетесь издателем, вы, как правило, можете получить доступ к этим транзакциям через журнал, а не через человека. другими словами, вам гораздо чаще хотелось бы знать, что люди подписываются на определенный журнал, а не на какие журналы подписывается конкретный человек. Так что в этом примере вы бы поместили свойство коллекции подписчиков в класс Magazine.