Я усвідомлюю, що вищезазначене запитання, ймовірно, викликає декілька «що ??
Я намагаюся обернути голову на кілька споріднених концепцій, в основному шаблону Saga ( http://www.rgoarchitects.com/Files/SOAPatterns/Saga.pdf ) у поєднанні з джерелом подій (концепція DDD : http://en.wikipedia.org/wiki/Domain-driven_design )
Хороший пост, який обговорює його разом: https://blog.jonathanoliver.com/cqrs-sagas-with-event-sourcing-part-ii-of-ii/
Я переходжу до питання за хвилину, але я думаю, що я повинен спробувати узагальнити те, що я розумію в ньому спочатку (що може бути неправильним, тому, будь ласка, виправте, якщо це так), оскільки це може вплинути на те, чому я задати питання для початку:
- Шаблон Saga - це свого роду брокер, який дає дію (кінцевий користувач, автоматизований тощо, по суті, все, що збирається змінити дані), ділить цю дію на ділову діяльність і надсилає кожну з цих дій як повідомлення на шину повідомлень, яка у свою чергу надсилає його до відповідних корінних коренів, про які слід піклуватися.
- Ці сукупні корені можуть діяти повністю автономно (приємне роз'єднання проблем, велика масштабованість тощо)
- Сам екземпляр Saga не містить жодної логіки бізнесу, яка міститься в сукупних коренях, до яких він надсилає діяльність. Єдина «логіка», що міститься в «Сазі», - «логіка процесу» (часто реалізована як державна машина), яка визначає на основі отриманих дій (а також подальших подій), що робити (тобто: які дії надсилати)
- Шаблони Saga реалізують своєрідну схему розподілених транзакцій. Тобто: коли одне з корінних коренів (які знову працюють автономно, не знаючи про існування інших людей) не вдається, всю дію, можливо, доведеться відкрутити назад.
- Це реалізується, маючи всі сукупні корені після завершення звіту про свою діяльність до Саги. (У випадку успіху, а також помилки)
- У випадку, якщо всі сукупні корені повернуть успіх, внутрішній державний механізм, якщо Сага визначає, що робити далі (або вирішує, що буде зроблено)
- У разі невдачі Сага видає всі сукупні корені, які брали участь в останній дії, так звану компенсаційну дію, тобто: дію для скасування останньої дії, зроблене кожним із сукупних коренів.
- Це може бути просто "мінус 1 голос", якщо дія була "плюс 1 голос", але це може бути складніше, як відновлення поштового блогу до попередньої версії.
- Надання подій (див. Поштовий блог, що поєднує два) має на меті зовнішнє збереження результатів кожної з заходів, які кожен із сукупних коренів здійснює до централізованого магазину подій (зміни в цьому контексті називаються "подіями")
- Цей магазин подій є "єдиною версією правди" і може бути використаний для відтворення стану всіх об'єктів, просто повторивши збережені події (фактично як журнал подій)
- Поєднання двох (тобто: дозволити сукупним кореням використовувати джерело подій для аутсорсингу, зберігаючи свої зміни, перш ніж звітувати назад у Сагу) дає безліч приємних можливостей, одна з яких стосується мого питання ...
Я відчував, що мені потрібно зірвати це з плеча, адже це багато чого можна зрозуміти за один раз. Враховуючи цей контекст / умонастрій (ще раз, виправте, якщо не так)
питання: Коли сукупний корінь отримує Компенсаційну дію і якщо цей сукупний корінь переклав зовнішні зміни, зміни станів використовуються як джерело подій, чи не буде Компенсаційна дія в усіх ситуаціях просто видаленням останньої події в Магазині подій для цього дано сукупний корінь? (Припустимо, що реалізація зберігається дозволяє видаляти)
Це мало б для мене сенсу (і це було б ще однією великою перевагою цієї комбінації), але, як я вже сказав, я можу робити ці припущення на основі неправильного / неповного розуміння цих понять.
Я сподіваюся, що це не стало занадто довго.
Спасибі.