Использование событий домена для захвата действий пользователей, а затем воспроизведения этих действий поверх снимка модели заказа (фактически, текущего состояния заказа до того, как пользователь начал его изменять).
Сохранять каждое изменение как серию событий, например, UserChangedShippingAddress, UserAlteredLineItem, UserDeletedLineItem, UserAddedLineItem.
Эти события могут быть сохранены после каждой обратной передачи, и им нужна только ссылка на соответствующий заказ. Чтобы восстановить текущее состояние заказа, достаточно просто воспроизвести события для текущих сохраненных объектов заказа.
Когда пользователь нажимает кнопку Сохранить, вы можете воспроизвести события и сохранить обновленную модель заказа в базе данных.
Вы используете базу данных - сеанс или представление не требуются, поэтому вы можете значительно снизить вес страницы и нагрузку на серверную память за счет некоторой производительности страницы (если вы решите перестраивать модель при каждой обратной передаче).
Обслуживание невероятно простое, поскольку благодаря легкости, с которой вы можете реализовать объект домена, автоматизированное тестирование легко используется, чтобы убедиться, что система ведет себя так, как вы ожидаете (при этом также документируя свои намерения для других разработчиков).
Поскольку вы используете базу данных, решение хорошо масштабируется на нескольких веб-серверах.
Использование этого подхода не требует каких-либо изменений в существующей модели домена, поэтому влияние на существующий код минимально. Самым большим недостатком является понимание концепции доменных событий, а также того, как они используются и злоупотребляют =)
По сути, это тот же подход, который описан Фредди Риосом, с небольшим количеством подробностей о том, как и какое хорошее ключевое слово для вас искать с помощью =)
http://jasondentler.com/blog/2009/11/simple-domain-events/ и http://www.udidahan.com/2009/06/14/domain-events-salvation/ являются хорошим фоновым чтением о событиях в домене. Вы также можете захотеть ознакомиться с источником событий, поскольку это, по сути, то, что вы будете делать (объект моментального снимка, события записи, события воспроизведения, объект моментального снимка снова).