Оба хранилища должны изменять только свои соответствующие таблицы, так как это их основная функциональность (после Single responsibility principle
).Эти репозитории будут обернуты Service
(класс-обертка, который имеет служебные функции для управления отношениями), где служба будет отвечать за правильное изменение обеих баз данных.Таким образом, эта служба может иметь функцию типа assignDogToHuman($humanId, $dogId)
, где эта функция будет вызывать оба хранилища и соответственно изменять их данные.
Делая это, вы гарантируете, что репозитории несут одну ответственность (обновление своей таблицы), а служба отвечает за управление отношениями между dogs
и humans
.
Это также дает вам дополнительное преимущество, заключающееся в том, что слой хранилища теперь можно заменить.Т.е. если вы когда-нибудь решите изменить базу данных (например, с Mysql на MongoDB), то только обменять / обновить нужно только репозитории, так как реализация функций, вызываемых assignDogToHuman
, должна оставаться прежней, и для этого сервиса это не имеет значениячто лежит в основе базы данных.
Надеюсь, это поможет вам, если у вас есть какие-либо вопросы, не стесняйтесь спрашивать