212 похожих чатов

Всем привет. Кто должен заниматься публикацией доменных событий? Юзкейс, репозиторий

или агрегат?

Почему возник этот вопрос.

Например, если публикацией событий занимается юзкейс:
экземплярАгрегата = репозиторий.верниМнеАгрегат(Айди);
экземплярАгрегата.измениСвойСостояние
репозиторий.сохрани(экземплярАгрегата)
события = агрегат.чтоПроизошло()
хранилищеСобытий.опубликуй(события)

Например, если публикацией событий занимается репозиторий:
репозиторий = фабрикаРепозиториев.создайРеп(дляСущности, сХранилищемСобытий)

пример реализации метода репозиторий.сохрани(агрегат):

// сохраняет
моё.хранилищеСобытий.опубликуй(агрегат.чтоПроизошло())

Или, если хранилище сбытий инжектится непосредственно в Агрегат при его воссоздании из репозитория. И он сам там сразу же публикует свои события с помощью внедренного в него хранилища.

В первом варианте разработчик прикладного кода может забыть опубликовать события накопленные агрегатом - печалька.

Во втором варианте вроде бы как нарушется СинглРеспонсибилити метода репозитория. Он не только сохраняет, но делает еще какую-то магию🤷🏻‍♂️

Ну и в третем варианте тоже что и во втором.


Так как лучше то?

6 ответов

11 просмотров

Публикация это dispatch?

Nikolay Deriglazov
ага

В моем представлении доменный сервис, но это не точно

вам сохранение событий нужно делать в репозиторий.сохрани(экземплярАгрегата)

Доменные события паблишиься в домене. Вы же в итоге интересуетесь ни кто из паблишит а кто отправляет. Ибо паблишинг и отправка две разные вещи. Отправляет инфраструктура обычно. Насчёт СРП так там как была одна причина для изменений так и осталась. Плюс композицию ни кто не отменял. А чтобы решить вопрос с синхронизацией сообщений и стейта берите Outbox pattern. Оно впринципе и не всегда нужно. Если мы знаем что можно делать ретрай сколько угодно раз то можно и не заморачиваться.

Nikolay-Deriglazov Автор вопроса
Sergei Baikin
Доменные события паблишиься в домене. Вы же в ито...

https://habr.com/ru/company/ispring/blog/569648/ спасибо. Нашел вот эту статейку. Тут как раз выбрали Transactional outbox

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
я имею в виду официально интегрированный в телегу? в том плане что не сливает переписку с пользователем?
Andrey
9
Кто-нибудь решал проблему с автоматическим скроллингом к выбранной ячейке в TDBGrid в Lazarus? Проблема в том, что есть допустим 3 столбца, третий столбец виден наполовину, вк...
Дмитрий Логинов
1
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
19
Приветствуем всех! Устали без проектов? Если вы программист и хотите получать стабильные заказы, компания Elif предлагает вам недельный курс по поиску проектов и их ведению. ...
Elif
1
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Чорт! Чорт! Чорт! Стала ставить через GetIt (написано же, что ручками не рекомендуется) Сломалось на дублировании моей TSkLabel. Чтож мне ее по всем проектам переименовывать в...
Катерина Свиридова
7
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
Карта сайта