fomvasss
@fomvasss
PHP developer

Какой паттерн использовать для задачи получение заказов, отправка статусов заказов из нескольких разных внешних источников?

Подскажите, какой подход, паттерн, структуру лучше использовать для решение следующей задачи:
Есть магазин (Laravel), нужно сделать получение заказов, отправка статусов заказов из нескольких внешних сервисов - торговых площадок например. В каждом из сервисов свой способ авторизации, свои форматы запросов/ответов, свои статусы.

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

В общем , главный вопрос в том, как это все правильно организовать, где указывать с каким сервисом сейчас работаем, создавать ли классы сервисов по одному и тому же интерфейсу или делать какие то адаптеры?
  • Вопрос задан
  • 946 просмотров
Решения вопроса 2
@matios
Technical Team Lead
Создается интерфейс и возможно абстрактный класс где будут перечислены методы, единые для всех сервисов.
Затем создается фабрика с помощью которой получаешь экземпляр класса нужного сервиса и вызываешь нужные методы.
Ответ написан
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
Начинаем с границ
Очерчиваем границы нашей системы, как-будто у нас есть этот "идеальный заказ".
Это будут интерфейсы некоторых абстрактных реквестов и респонсов.
Реквест на обновление, добавление и респонс на получение и т.д.... И несколько ДТО их реализующие или которые и будут этим интерфейсом сами по себе.

Далее вы строите клиент OrderClientInterface, который выше созданные реквесты отправляет, респонсы возвращает. И на его интерфейс вы завязываетесь. Строите поверх него фабрику, которая построит вам нужный клиент под нужную систему :)

Адаптеры (к слову это и паттерн одноименный)
Клиенты-адаптеры уже будут связывать АПИ внешних систем с интерфейсом вашего абстрактного (имеется в виду интерфейс) клиента. Через guzzle, или через некий свой sdk, уже для вашего домена не важно, дело техники. С авторизацией или без нее... Это детали клиента.

Это довольно общая рекомендация, но стоящая и очень упростит вам работу. Несколько интерфейсов, несколько дто, фабрика и остальное дело техники, просто и надежно

Бизнес-логика
Теперь пишите хэндлеры в вашей бизнес-логикек: из контроллера, демона, команды вызываете нужные хэндлеры и строите запросы. Саму обработку их результата и контроль состояния делаете в сущностях.
Ну я так понимаю, вопрос касался адаптеров.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
vitaly_74
@vitaly_74
сейчас подобным занимаюсь. что надо: фабрику точно, один интерфейс для каждого вида операции (внесение средств возврат средств), какие либо адаптеры, для саязи с вашей црм, и декораторы (чтобы в любой момент добавлять функционал не изменяя старый код). и возможно еще нужна будет стратегия (для принятия решения если транзакция будет отменена, то что делать).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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