Event Sourcing — це шаблон проєктування, який представляє стан об'єкта у вигляді множини подій.
Проблема
Потрібно мати доступ до історії змін сутності.
Переваги та недоліки
Переваги
доступ до історії змін сутності можливість відновити стан на момент часу
Недоліки
важкий в реалізації важко опрацювати зміну структури моделі поганий коли часто потрібно знати стан сутності
Зауваження
Події не можна видаляти чи змінювати. Будь-який новий стан сутності потрібно змінювати шляхом додавання нової події. Для того щоб покращити продуктивність і не застосовувати всі події вводять термін snapshot. Це збережений стан моделі із врахуванням подій на момент часу. Існують різноманітні стратегії додавання snapshot'ів, від кількості подій до часового проміжку між ними.
Опис мовою C# Додамо деякі класи, які будуть симулювати реальні об'єкти.
Додамо базовий клас для подій
Та декілька реалізацій цих подій:
Змінимо нашу сутність таким чином, щоб вона містила інформацію про події:
Та сховище, яке вміє працювати із нашою сутністю та подіями:
Використання цього шаблону не помітне для користувачів:
Реалізація
C#
Див. також Шаблони проєктування програмного забезпечення Command and Query Objects
Джерела A simple snapshots example Event sourcing: handle event schema changing