Ответы пользователя по тегу Паттерны проектирования
  • Взаимодействие нескольких репозиториев. Как объединить?

    @nicandr
    Максим Федоров правильно вам написал, вам нужен еще один слой который будет взаимодействовать с вашими репозиториями, в симфони как и в лбдом другом фреимворке вся логика должна быть в сервисе. Из вашего описания вы сделали facade паттерн чтобы в клиентском коде все бьло просто. Для этого подойдет сервис, который может который так же модет наследовать(implement) интерфейс.

    interface CategoryRepositoryInterface
    {
         public function findOne($id);
         public function findAll(): array;
         public function save(CategoryInterface $category);
         public function remove(CategoryInterface $category);
    }
    class CustomNameOfClass implements CategoryRepositoryInterface // ну тут имя лучше изменить
    {
          public function findOne($id){};  // тут тоже лучше иметь return type
         public function findAll(){}: array;
         public function save(CategoryInterface $category){}; // тут тоже лучше иметь return type
         public function remove(CategoryInterface $category){}; // тут тоже лучше иметь return type
    }

    Так будет тоже самое что и сейчас у вас, только репозитории работают отдельно, и сервис слой их обьеденяет с вашей логикой. Репозитории не должны знать о существовании других репозиториев.
    Поскльку у вас несколько репозиториев, создайте DTO и все данные после того как они преобразованы киньте в DTO, так у вас бьудет один стандартный обьект, над которым вы сможете выполнять дальнейшую логику.
    Ответ написан
    Комментировать