Я чувствую, что должен быть лучший способ сделать это.
Ну, это действительно зависит от масштаба.Когда ваша объектная модель довольно мала, и вы (вполне) уверены, что в ближайшие месяцы или годы не ожидается каких-либо серьезных улучшений ... тогда такая простая "двойная бухгалтерия" может быть разумным ответом.
Но в более реалистичных сценариях: да, этот подход быстро ломается.
Затем он часто помогает взглянуть на идеи доменного дизайна.Прежде всего: посмотрите, что вы моделируете.Конечно, мой питомец знает меня, но не знает понятия «владеть», не знает, что я его владелец.
Итак, первое решение может быть таким: просто отбросьте эту owner
часть из класса Pet.Вместо этого вы можете захотеть создать какой-то индекс.В самой простой форме это может быть карта.В каком-то центральном реестре сказано , что человеку X принадлежит домашнее животное Y. Теперь ваш код может пойти и спросить Y, знает ли он владельца X.
И, возвращаясь к DDD, вы говорите о агрегаты .Вещи, которые так или иначе принадлежат друг другу.Но вы не можете просто добраться до любого участников, вам всегда нужно пройти через некоторый элемент root .См. здесь , например.