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