Создание объектов, которые должны быть внедрены с объектами Bridge (pattern). Как я должен это делать?

Контекст следующий:

У меня есть класс заданий, представляющий задание, которое отправляется в очередь заданий.
В настоящее время мы используем только SQS для этой цели, но в будущем мы можем перейти на Redis или другое решение MQ.
Поэтому в настоящее время у меня есть AbstractJob, который может быть расширен до ConcreteJobOne и ConcreteJobTwo, и может быть использован AbstractQueueClient (который может быть SqsQueueClient). Мне нужен способ получить полезную нагрузку от объекта Job, я пришел с помощью схема моста.

$parameters = [];
$sqsClient = new AbstractQueueClient();
$jobOne = new ConcreteJobOne($parameters, new SqsPayloadBridge());
$sqsClient->queueSingleJob($jobOne);

Благодаря этому я могу изменить способ создания полезной нагрузки для конкретного клиента.

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

Какие-нибудь мысли?

1

Решение

Я решил это, вообще не используя мост.

Реализации AbstractQueueClient будут обрабатывать -> toArray () из реализаций Job так, как они считают нужным.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector