Size: a a a

Архитектура ИТ-решений

2020 January 22

PD

Phil Delgyado in Архитектура ИТ-решений
Сами по себе наборы событий на агрегат не получаются, это последствия общего потока событий на систему (ну, на контекст). Который может распадаться на этот список событий по какой-то логике, но первичен именно общий поток. Так как агрегаты в общем виде не независимы. И вот этот поток событий - вполне делается на кафке. Да, с возможностью повторов, в том числе выделенных.
источник
2020 January 23

AS

Andrei Soloschak in Архитектура ИТ-решений
Phil Delgyado
Сами по себе наборы событий на агрегат не получаются, это последствия общего потока событий на систему (ну, на контекст). Который может распадаться на этот список событий по какой-то логике, но первичен именно общий поток. Так как агрегаты в общем виде не независимы. И вот этот поток событий - вполне делается на кафке. Да, с возможностью повторов, в том числе выделенных.
Откуда берётся этот общий поток?
Давайте конкретный простенький пример. Есть скажем агрегат User (пользователь). У него например есть команды Создать (Create) и Добавить паспортные данные (AddPassport)
Его состояние хранится не в виде записи в РСУБД. А в виде двух событий UserCreated и PassportAdded связанных с идентификатором.
При чем здесь поток событий?
источник

PD

Phil Delgyado in Архитектура ИТ-решений
А откуда появится AddPassport?
Есть контекст "Управление пользователями", в котором куча агрегатов - профили, KYC, аккаунты и что там еще появяется.
И есть поток событий от конечных систем на "Создать новый профиль", "Изменить тариф", которые превращаются уже в "AddPassport, "CreateUser", "SetUserKYCLevel" ....
И повторять имеет смысл (при ошибках) именно весь поток на контекст (возможно как-то фильтруя по тому, к кому событие относится).
источник

AS

Andrei Soloschak in Архитектура ИТ-решений
Phil Delgyado
А откуда появится AddPassport?
Есть контекст "Управление пользователями", в котором куча агрегатов - профили, KYC, аккаунты и что там еще появяется.
И есть поток событий от конечных систем на "Создать новый профиль", "Изменить тариф", которые превращаются уже в "AddPassport, "CreateUser", "SetUserKYCLevel" ....
И повторять имеет смысл (при ошибках) именно весь поток на контекст (возможно как-то фильтруя по тому, к кому событие относится).
Вообще не важно как приходят команды. Это другой архитектурный слой (DomainLayer)
Исходные сигналы рождаются в слое внешних адаптеров (Adapters Layer). В качестве адаптеров может быть REST API, очередь и т. д. То есть вид и количество адаптеров не имеет значения.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Ну вот между адаптерами и контекстом и интересна очередь. Собственно, очередь сигналов на контекст.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Смысл мне хранить историю изменения отдельного агрегата, если ее все равно нет смысла применять без изменения других?
источник

AS

Andrei Soloschak in Архитектура ИТ-решений
Phil Delgyado
Ну вот между адаптерами и контекстом и интересна очередь. Собственно, очередь сигналов на контекст.
Нет никаких очередей между уровнями. Все виды очередей это всегда адаптеры. Здесь почитайте. https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/#application-layer
источник

Ms

Mutko says in Архитектура ИТ-решений
Такое ощущение что речь вы об одном ведете, только словарь разный
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Это один из вариантов архитектуры, не единственный же...
источник

AS

Andrei Soloschak in Архитектура ИТ-решений
Phil Delgyado
Смысл мне хранить историю изменения отдельного агрегата, если ее все равно нет смысла применять без изменения других?
Я говорил про свой простой пример. В вашем случае сначала нужно провести доменное моделирование.
Скорее всего будет несколько агрегатов. Например UserRegistrationProcess - оркестратор и User
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Ну, там же в рамках этот оркестратора же много агрегатов будет затронуто?
источник

AS

Andrei Soloschak in Архитектура ИТ-решений
Phil Delgyado
Это один из вариантов архитектуры, не единственный же...
Я рассказал что есть ES и  в чем разница например с Event Bus
источник

PD

Phil Delgyado in Архитектура ИТ-решений
UserRegistrationProcess - это куча изменений даже в разных контекстах может быть. И если повторять их - то нужно все.
источник

AS

Andrei Soloschak in Архитектура ИТ-решений
Phil Delgyado
Ну, там же в рамках этот оркестратора же много агрегатов будет затронуто?
Я не знаю. Нужно доменное моделирование.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Т.е. source-of-truth - это запрос на регистрацию пользователя. Целиком, как есть.
источник

AS

Andrei Soloschak in Архитектура ИТ-решений
У каждого агрегата свой набор команд и событий. Каждый агрегат логически автономен
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Пользовательская команда может менять несколько агрегатов?
источник

AS

Andrei Soloschak in Архитектура ИТ-решений
Это вопрос к чему?
источник

AS

Andrei Soloschak in Архитектура ИТ-решений
Я уже перестал понимать о чем мы спорим.
источник

AS

Andrei Soloschak in Архитектура ИТ-решений
Ладно спать пора
источник