Memento — сохранение и восстановление состояния объектов
Memento позволяет сохранить внутреннее состояние объекта в специальный снимок (мементо), а затем восстановить его без раскрытия внутренних деталей. Паттерн отделяет состояние от логики, обеспечивая безопасный undo/redo, откат транзакций и временные снимки.
Используется в транзакционных системах, редакторах, workflow, агрегатах DDD, системах версионирования, управлении документами, интеграциях и сложных процессах.
Memento помогает создавать восстановимые процессы, обеспечивать откаты действий, сохранять промежуточные состояния и повышать надежность архитектуры.
Паттерн Memento играет важную роль в архитектуре систем, где важно сохранять и восстанавливать состояние объектов без нарушения инкапсуляции. Он позволяет формировать снимки, которые отражают состояние на любой момент времени, и обеспечивать управление изменениями в долгоживущих объектах и процессах.
Главная идея Memento
Memento позволяет:
-
зафиксировать состояние объекта,
-
хранить его вне объекта,
-
восстановить объект в это состояние,
-
делать это без раскрытия внутренних полей или структуры.
Таким образом, логика и состояние отделены — одна из важнейших архитектурных практик.
Где используется Memento в архитектуре
1. Undo/Redo в пользовательских системах
В редакторах:
-
текста,
-
графики,
-
моделей,
-
конфигураций,
-
документов.
Каждое действие создаёт Memento — шаг можно отменить или повторить.
2. Транзакционные процессы
Перед важной операцией создаётся снимок:
-
если действие успешное → снимается;
-
если ошибка → агрегат или процесс возвращается к предыдущему состоянию.
Это особенно важно в системах без полноценной ACID-транзакции.
3. Агрегаты DDD
Memento используется как:
-
механизм восстановления агрегатов перед сложным действием;
-
основа snapshot’ов в Event Sourcing (снапшот = мементо);
-
инструмент сохранения состояния долгоживущих объектов.
4. Workflow и процессы
Процесс может сохранять промежуточные состояния:
-
«до выполнения шага»,
-
«после шага»,
-
«после завершения задачи».
Если шаг упал — процесс можно восстановить.
5. Хранилища версий (versioning)
Документы, настройки, модели, схемы:
-
Memento создаёт «версии»,
-
архитектура получает механизм отката и анализа изменений.
6. Интеграционные системы
Перед отправкой в сторонний сервис система может сохранять состояние:
-
если внешний сервис дал ошибку — состояние откатывается;
-
если ответ невалидный — объект возвращается к прежней версии.
7. Машины состояний
Когда переход между состояниями может быть ошибочным — Memento фиксирует старое состояние.
Почему Memento важен для архитектора
1. Инкапсуляция
Состояние сохраняется без раскрытия внутренностей — модель остаётся чистой.
2. Надежность
Архитектор получает предсказуемую систему, где критические операции можно отменить.
3. Контроль изменений
Memento — это инструмент управления рисками, ошибок и неверных транзакций.
4. Возможность «временем управлять»
Система может:
-
откатываться назад,
-
переходить к старым версиям данных,
-
анализировать историю развития объекта.
Преимущества Memento
-
чистая инкапсуляция;
-
сохранение сложных состояний;
-
управление исполнением процессов;
-
улучшение UX за счет undo/redo;
-
поддержка версионирования;
-
совместимость с Event Sourcing.
Недостатки
-
Memento может занимать много места;
-
сложность в управлении хранилищем снимков;
-
риск создания слишком больших и частых снимков;
-
необходимость чистки устаревших состояний.
Поэтому архитектор использует Memento аккуратно — с правилами хранения и стратегиями компрессии или дедупликации.
Memento в российских учебниках
В учебниках этот паттерн рассматривается как:
-
механизм устойчивости бизнес-процессов;
-
инструмент логического резервирования;
-
часть архитектуры транзакций;
-
элемент инструментов моделирования;
-
механизм контроля состояний документов и объектов.
Почему архитектор обязан владеть Memento
Потому что в современной архитектуре невозможно обеспечить бизнес-требования без механизмов:
-
отката,
-
реставрации,
-
версионирования,
-
промежуточных снимков,
-
восстановления процессов.
Memento — базовый фундамент, на котором строятся:
-
Event Sourcing,
-
workflow-движки,
-
редакторы документов,
-
stateful-сервисы,
-
системы правил.