myks92
@myks92
Нашёл решение — пометь вопрос ответом!

YII2 модули. Подписываться на события или Mailer компонент в модуле?

Привет! В проектировании модулей часто требуется рассылка Email писем. Уведомление админов или пользователей. Обычно это делается двумя способами:
1. Подписывать на события компонент приложения для рассылки и реализовать рассылку.
2. Реализуется специальный компонент Mailer, который жестко внедряется в бизнес логику и настраивается в модуле. Пример https://github.com/dektrium/yii2-user/blob/master/... И если нужно менять его, то меняем через DI контейнер.

Из этого следует вопрос два вопроса:
1. Какой вариант лучше использовать? Я думаю, что лучше первый.
2. Если используем первый вариант, то где вешать на него события? В конфиге или где-то ещё?
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
@viktorprogger
ИМХО, компоненты, реализующие основную бизнес-логику и рассылки не должны знать друг о друге. Лучше написать класс, который знает о том, что есть события, по которым нужно отправлять письма (назовем его MailEventManager). Плюс добавить интерфейс для классов - почтовых событий. Например, пусть они возвращают текст письма, отправителя, получателя и тему. И для каждого поытового события пишем по классу, реализующему этот интерфейс. А MailEventManager сопоставляет произошедшее событие (напр., регистрация пользователя) и имеющийся класс почтового события, из которого получает все необходимые данные. Полученные же данные уже передает в компонент, непосредственно осуществляющий отправку писем (или уведомлений в телеграм, или что угодно еще).

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

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

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