@springimport

Как работать репозиторию с API?

Я пробую репозитории вместе с API и уже понял что меня ждет проблема с копиями объектов. Может быть ситуация когда, например, заказ загружен и используются для подсчета чего-то (в сущности, как вложенный объект) и этот же заказ обновляется через форму и repository->save, в итоге имеем неверные данные заказа в сущности. Насколько я понял, для решения такой проблемы люди используют aggregate. В итоге не понятно:
1. Что делать в ситуации когда после загрузки данных для обновления данных произошла ошибка repository->save(entity) в инфраструктуре. Что если нужно использовать настоящие данные сущности а там не сохраненные данные с ошибкой? Наверное, нужно загружать данные сначала в копию entity, потом пытаться ее сохранить, а потом удалить все старые объекты entity и оставить только новую вместо них.
2. Правильно ли я понял что нужно написать фабрики, корневое хранилище и работу со всем этим в репозиториях чтобы все объекты хранились в 1 месте и на них были только ссылки с остальных мест?
3. При редактировании адреса клиента в заказе он меняется и у клиента (как пример) => после repository->save() адреса клиентов будут неверные или устаревшие. Значит репозиторий должен удалять старые объекты адресов клиента?

Схема:
API <=> ApiClient <=> Repository (entity) <=> Service <= Html forms
  • Вопрос задан
  • 203 просмотра
Пригласить эксперта
Ответы на вопрос 1
@rPman
С трудом понимаю что у вас за проблемы и с каким именно репозитарием?

Разделите всю работу на атомарные операции, между которыми ваша база данных будет находиться в корректном состоянии, а за исполнение и контроль целостности в пределах атомарной операции пусть отвечает специально выделенная часть - например транзакционные базы данных, либо выделенный сервис, блокирующий одновременную работу с одними и теми же данными (есть блокировки на всю базу, на тип данных/таблицу и даже на отдельные объекты, это вопрос выбора инструментария)

Если речь идет об интерфейсе, вам придется самостоятельно озаботиться о проблемах и конфтликтах, например форма редактирования может держать открытое соединение с сервером и оперативно сообщать всем об изменениях и разруливать конфликты.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы