Уютный чатик про ООП

Читать

Смотреть

Saga простыми словами

Сага - event listener на стероидах. Она получает ивенты (факт того, что что-то произошло) и отдает команды (запросы на выполнение действия). Другими словами - она занимается только координированием процесса.
Каждая из частей (шагов) саги является атомарной, аналогия - транзакции. Если есть сага из 3 шагов и 2 шаг зафейлился - она может выполнить компенсирующее действие.
А может и не выполнить - может не делать вообще никаких действий с сайд-эффектами до финального шага, а собирать все в себе. Это возможно благодаря тому, что саги могут иметь собственный стейт.
Собственно, поэтому в одной системе могут существовать несколько инстансов одной и той же саги - просто стейт у них будет разным (и ивенты, которые сага будет принимать, будут зависеть от содержания ивента и от текущего стейта).
Можно провести аналогию с Doctrine - сага может (но не обязана) работать как UoW - собирать данные и затем делать flush.