Pull to refresh

Comments 8

UFO just landed and posted this here
Таким образом, получаем полностью сконфигурированную шину сообщений. Очень просто, не правда ли?

Как раз этот блок конфигураций не сказать что очевидный, особенно тому, кто только начал разбираться.
Разжевали бы, что именно там происходит — полезность статьи сильно бы повысилась.

Вопрос по поводу именования шины ('message-bus').
Имеет ли смысл именовать класс, у которого по определению уже есть имя, причем уникальное?

Иначе говоря, зачем писать
$bus = $this->container->get('message-bus');

если можно
$bus = $this->container->get(MessageBus::class);

плюсы
1) в любой IDE переходим в определение класса по ctrl+ПКМ
2) опять же, при случае, переименовать класс в IDE гораздо удобнее, чем реплейсить строку 'message-bus'

В приложении может быть более одной шины. Распространенная практика когда используются разные шины для команд, запросов и событий. Кроме того имя шины далее используется в штампе. Без этого RoutableMessageBus не сможет найти Consumer.

В приложении может быть более одной шины

Ну да, например CommandBus, RequestBus, EventBus, отдельные классы выглядят логично
Кроме того имя шины далее используется в штампе

Так или иначе, это строка, и он по этой строке вытаскивает зависимость из контейнера, так что разницы никакой

В самом деле, спасибо, принимаю, как ценное замечание.

Если говорить с точки зрения symfony framework(а скорее даже SOLID), то ваш код вобще не обязан знать что используется и как оно работает. Есть MessageBusInterface, который запрашивает ваш класс и это все что он должен знать. Остальное - не его компетенция. Ваш класс запрашивает интерфейс как аргумент своего конструктора, а уже что туда передадут и откуда оно возмется - вопрос конейнера, который будет создавать и конфигурировать ваш класс. И это работает не только с шиной сообщений: логи, кеш - туда же. Да хоть репозитории. Такой подход позволяет гибко управлять потоками данных с одной стороны, и менять реализации интерфейсов в зависимости от окружения с другой. При этом в самом коде не меняется ни строчки, только конфиурации.

UFO just landed and posted this here

Конечно полноценное symfony-приложение кошернее, но если нужно прикрутить чуть чуть асинхронности к действующему проекту, почему бы не воспользоваться хорошими компонентами.

Sign up to leave a comment.

Articles