Контекст следующий:
У меня есть класс заданий, представляющий задание, которое отправляется в очередь заданий.
В настоящее время мы используем только SQS для этой цели, но в будущем мы можем перейти на Redis или другое решение MQ.
Поэтому в настоящее время у меня есть AbstractJob, который может быть расширен до ConcreteJobOne и ConcreteJobTwo, и может быть использован AbstractQueueClient (который может быть SqsQueueClient). Мне нужен способ получить полезную нагрузку от объекта Job, я пришел с помощью схема моста.
$parameters = [];
$sqsClient = new AbstractQueueClient();
$jobOne = new ConcreteJobOne($parameters, new SqsPayloadBridge());
$sqsClient->queueSingleJob($jobOne);
Благодаря этому я могу изменить способ создания полезной нагрузки для конкретного клиента.
Но контроллер, который заботится о постановке в очередь этой работы, должен знать о SqsPayloadBridge и всех других мостах, которые могут появиться в будущем. Я думал об использовании шаблона Factory, чтобы решить эту проблему, но кажется, что это излишне.
Какие-нибудь мысли?
Я решил это, вообще не используя мост.
Реализации AbstractQueueClient будут обрабатывать -> toArray () из реализаций Job так, как они считают нужным.
Других решений пока нет …