Это не так!
Из мелочей, которых я знаю, никто из них не поддерживает такого рода транзакции.Все побочные эффекты, которые накапливаются во время выполнения, устанавливаются.Не поддерживается автоматический откат.В настоящее время проводятся исследования, как поддержать это, но ничего не попробовать в AFAIK.Это то, что вы должны знать, что, если вы отлаживаете и возвращаетесь в трассировку стека, объекты не находятся в состоянии, в котором они находились во время выполнения.Вы видите только объекты в их новейшем состоянии.
Хотя это не так просто поддержать в общем виде, есть некоторые возможности решить эту проблему с помощью дизайна вашей программы.Наиболее известные подходы:
- Вы копируете / клонируете объекты, которые хотите изменить, и применяете изменения к копиям.Если что-то пойдет не так, вы просто выбросите копии.Если все в порядке, вы применяете содержимое копий к оригиналам.Вы можете решить эту проблему, используя шаблон памяти.
- вы применяете изменения к своим объектам, но если что-то идет не так, вы повторно применяете исходный контент.Это можно реализовать с помощью действий do / undo, используя шаблон команды