Size: a a a

Ваdоо PHP Мееtuр

2020 September 18

М

Максим in Ваdоо PHP Мееtuр
Yushkevich Vitaly
Есть гипотеза, что сервисные уведомления скорее всего захардкожены (если у вас там гибкий конструктор реализован, то такой вопрос скорее всего бы не встал), а маркетинговые рассылки - это несколько моделей с крудами (пользователи ; листы / сегменты; рекламные кампании; рассылки; шаблоны писем).

Я бы выделил общее и посмотрел на бизнес процессы работы с этим. В последнюю очередь посмотрел на интерфейс (его важно учитывать, но интерфейс может меняться быстрее и чаще дизайна вашей системы, это надо помнить)
Конструктор гибкий) Имеются фабричные методы
Об интерфейсе, кончено речи не идёт) это вообще последнее дело)
источник

YV

Yushkevich Vitaly in Ваdоо PHP Мееtuр
Максим
Я как раз делаю по DDD. Соотвественно контексты разные. Задачи по сути разные. С одной строны идут оповещения от площадки, а с другой стороны от группы людей. Даже заучит странно запланировать рассылку в системе уведомлений. И по факту и статистика другая, аналитика и так далее.

Полагаю, что Вы правильно разделили на события/оповещения системы и маркетинговые рассылки. Наверное, так оно и есть.
Кажется тогда, что ваша проблема - в смешанном слое транспорта и бизнес логики рассылок. Если вы их разнесете, то все должно встать на свои места
источник

М

Максим in Ваdоо PHP Мееtuр
Yushkevich Vitaly
Отвечая на вопросы:

1) я бы выделил транспорт в отдельный слой абстракции. И ему было бы все равно, откуда приходили данные для отправки.  При этом была бы только одна точка ответственности за транспорт.
Ещё тогда вопрос. Под каждый транспорт нужен отдельный шаблон:
- mail
- sms
- service

Как их лучше реализовать? В одной сущности Template и уже внутри делать гибкий конструктор создания для каждого транспорта:
Template::createEmail(...)
Template::createSms(...)
Template::createService(...)
Если говорит о базе, то при таком подходе таблица будет одна на все типы транспорта.

Либо лучше под каждый транспорт свой шаблон:
new MailTemplate(...);
new SmsTemplate(...);
new ServiceTemplate(...);
При таком подходе все данные будут отделены в свои таблицы.

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

М

Максим in Ваdоо PHP Мееtuр
Yushkevich Vitaly
2) я не уверен, что они действительно тесно связаны. Но если это действительно так, то почему бы нет.
Стоит посмотреть бизнес процессы и кейсы использования, администрирования и сбора различных метрик. У меня есть гипотеза, что это разные функциональные возможности и их не стоит смешивать.
Да, наверное, они разные, всё таки. Задачи у них разные. Просто я увидел в них много общего и подумал, что одно и то же. В принципе развеяли мои сомнения по соединению их) Конечно, посмотрю ещё бизнес процессы, но уже склоняюсь к разделению их, как и планировалось сначала)
источник

М

Максим in Ваdоо PHP Мееtuр
Yushkevich Vitaly
Кажется тогда, что ваша проблема - в смешанном слое транспорта и бизнес логики рассылок. Если вы их разнесете, то все должно встать на свои места
Меня смутило, что много общего. В целом ничего не запутано. Просто много общего)
источник

YV

Yushkevich Vitaly in Ваdоо PHP Мееtuр
Максим
Ещё тогда вопрос. Под каждый транспорт нужен отдельный шаблон:
- mail
- sms
- service

Как их лучше реализовать? В одной сущности Template и уже внутри делать гибкий конструктор создания для каждого транспорта:
Template::createEmail(...)
Template::createSms(...)
Template::createService(...)
Если говорит о базе, то при таком подходе таблица будет одна на все типы транспорта.

Либо лучше под каждый транспорт свой шаблон:
new MailTemplate(...);
new SmsTemplate(...);
new ServiceTemplate(...);
При таком подходе все данные будут отделены в свои таблицы.

В дальнейшем могут добавиться типы транспорта: чат, пуш. Я склоняюсь ко второму варианту, но не избыточен ли он?
У меня правда очень мало контекста, чтобы ответить на этот вопрос (не говоря уже «чтоы ответить правильно»).

Я бы посоветовал посмотреть на систему уведомлений в ларавел через метод via.  И вот этот сайт в придачу https://laravel-notification-channels.com

Там чуть больше 50 опенсорсных каналов, где каждый отвечает за транспорт по своему уровню.  
Когда вызывается уведомление в методе via() вы определяете (роутите по сути) какие каналы вам нужны, и дальше взвываете метод. В каждом методе уже оборачиваете шаблон. Если это кажется не правильным, то тут можно сделать фабрики и вызывать методы, вынеся часть этой логики в отдельный класс. С точки зрения srp это будет более верно.
источник

YV

Yushkevich Vitaly in Ваdоо PHP Мееtuр
Чтобы ответить более предметно, как минимум нужно знать, где и как задаются и управляются событийные уведомления, каким набором данных обладает каждый из шаблонов под каждое уведомление; как они  администрируются.
источник

М

Максим in Ваdоо PHP Мееtuр
Yushkevich Vitaly
У меня правда очень мало контекста, чтобы ответить на этот вопрос (не говоря уже «чтоы ответить правильно»).

Я бы посоветовал посмотреть на систему уведомлений в ларавел через метод via.  И вот этот сайт в придачу https://laravel-notification-channels.com

Там чуть больше 50 опенсорсных каналов, где каждый отвечает за транспорт по своему уровню.  
Когда вызывается уведомление в методе via() вы определяете (роутите по сути) какие каналы вам нужны, и дальше взвываете метод. В каждом методе уже оборачиваете шаблон. Если это кажется не правильным, то тут можно сделать фабрики и вызывать методы, вынеся часть этой логики в отдельный класс. С точки зрения srp это будет более верно.
В принципе смотрел это) Планирую использовать symfony/notifier. Он похож) Полазаю ещё. Вдруг что-то придёт в голову)
источник

М

Максим in Ваdоо PHP Мееtuр
Yushkevich Vitaly
Чтобы ответить более предметно, как минимум нужно знать, где и как задаются и управляются событийные уведомления, каким набором данных обладает каждый из шаблонов под каждое уведомление; как они  администрируются.
Уведомления создаются в Listener доменных событий. На каждое событие по сути подписывается пользователь и выбирает канал доставки. Вот и вся кухня) вроде просто, но запутался)
источник

KS

Kirill Shilov in Ваdоо PHP Мееtuр
Максим
Я как раз делаю по DDD. Соотвественно контексты разные. Задачи по сути разные. С одной строны идут оповещения от площадки, а с другой стороны от группы людей. Даже заучит странно запланировать рассылку в системе уведомлений. И по факту и статистика другая, аналитика и так далее.

Полагаю, что Вы правильно разделили на события/оповещения системы и маркетинговые рассылки. Наверное, так оно и есть.
Может вам стоит посмотреть в сторону декоратора?На рефакторинг .гуру как раз сей паттерн рассматривается в контексте вашей задачи
источник

СА

Сергей Аксёнов... in Ваdоо PHP Мееtuр
Максим
Всем привет. Немного офтоп))

Делаю сервис уведомлений. В нем три канала доставки: смс, почта, в сервис.

Всё вроде бы шло хорошо. Сделал каналы, типы уведомлений, подписчиков. Как дошло дело до проектирования отправки и шаблонов писем, то немного зашёл в ступор... У меня есть сейчас система рассылки сообщений в ней тоже есть каналы рассылки: смс и маил. Шаблоны писем.

Вопросы:
1. Стоит ли проектировать в системе уведомлений реализацию отправки сообщений по каналам, шаблоны писем, не смотря на то, что они уже есть такие же в системе рассылки? Либо мне из системы уведомлений просто передавать в систему рассылки?
2.  Может быть объединить эти два сервиса, раз они так тесно связаны?
Быстрая и не факт что правильная декомпозиция. Сообщения и уведомления - это, похоже, две разные бизнес-сущности, но в словаре предметной области вам стоит как следует объяснить разницу между ними.

Далее есть некий набор правил, по которым они попадают к адресатам, это подписки и настройки. Эти правила также разные для сообщений и для уведомлений, часть этих правил вообще относится к пользователю.

В момент создания сообщений и уведомлений из этих правил становится ясно, к каким адресатам они должны попасть и по каким каналам, т.е. происходит диспетчеризация. Здесь уже создаются сущности транспортного уровня "письмо", "SMS", "пуш", "сообщение в сервисе" (и в процессе создания письма например вызывается сервис его форматирования).

Дальше они попадают в сервисы, осуществляющие доставку и обработку всех ошибок доставки.

Итого: две сущности "уведомление" и "сообщение", два диспетчера, вспомогательные форматтеры, сервисы доставки по числу каналов связи. Кажется так.
источник

М

Максим in Ваdоо PHP Мееtuр
Kirill Shilov
Может вам стоит посмотреть в сторону декоратора?На рефакторинг .гуру как раз сей паттерн рассматривается в контексте вашей задачи
Можете показать где рассматривается пример уведомлений с этим партерном?) Глянул бы)
источник

М

Максим in Ваdоо PHP Мееtuр
Сергей Аксёнов
Быстрая и не факт что правильная декомпозиция. Сообщения и уведомления - это, похоже, две разные бизнес-сущности, но в словаре предметной области вам стоит как следует объяснить разницу между ними.

Далее есть некий набор правил, по которым они попадают к адресатам, это подписки и настройки. Эти правила также разные для сообщений и для уведомлений, часть этих правил вообще относится к пользователю.

В момент создания сообщений и уведомлений из этих правил становится ясно, к каким адресатам они должны попасть и по каким каналам, т.е. происходит диспетчеризация. Здесь уже создаются сущности транспортного уровня "письмо", "SMS", "пуш", "сообщение в сервисе" (и в процессе создания письма например вызывается сервис его форматирования).

Дальше они попадают в сервисы, осуществляющие доставку и обработку всех ошибок доставки.

Итого: две сущности "уведомление" и "сообщение", два диспетчера, вспомогательные форматтеры, сервисы доставки по числу каналов связи. Кажется так.
Примерно понял) Единственное: 1. Не пойму сообщения, шаблоны нужно ли разделять на каждый транспорт и шаблон своя независимая сущность?
2. Система рассылки и уведомлений одно и то же, либо разное? Обсуждая тут пришли к тому, что разные вещи. Что думаете вы?
источник

KS

Kirill Shilov in Ваdоо PHP Мееtuр
Максим
Можете показать где рассматривается пример уведомлений с этим партерном?) Глянул бы)
источник

СА

Сергей Аксёнов... in Ваdоо PHP Мееtuр
Максим
Примерно понял) Единственное: 1. Не пойму сообщения, шаблоны нужно ли разделять на каждый транспорт и шаблон своя независимая сущность?
2. Система рассылки и уведомлений одно и то же, либо разное? Обсуждая тут пришли к тому, что разные вещи. Что думаете вы?
1. Если нет задачи варьировать оформление писем, а надо просто красиво и совместимо их форматировать с брэндингом сервиса - то я бы оставил один шаблонизатор.

2. Это доменному эксперту виднее. В каких-то случаях можно считать (маркетинговую?) рассылку частным случаем уведомления, это немного упростит конструкцию.
источник
2020 October 05

D

Dos in Ваdоо PHP Мееtuр
Всем привет. Скажите, пожалуйста, если ли какие-то шаблоны для документации проекта в confluence. Я имею в виду структуру, что документировать, как и так далее. Если поделитесь полезными ссылками буду непременно благодарен!
источник
2020 October 07

PO

Pavel Omelchenko in Ваdоо PHP Мееtuр
Давай сслыку на гит
источник

D

Dmitriy in Ваdоо PHP Мееtuр
это мем)
источник

Р

Роман in Ваdоо PHP Мееtuр
это обман
источник

PO

Pavel Omelchenko in Ваdоо PHP Мееtuр
А как же кроссревью 😔
источник