Сессии изменений
Действия в результате своего выполнения могут изменять состояние системы, в которой они выполняются. Записывать эти изменения сразу в базу данных не всегда желательно, как с точки зрения целостности, так и с точки зрения эргономики системы. Поэтому в платформе существует возможность накапливать эти изменения локально в сессиях изменений.
Изменениями в сессии могут быть изменения первичных свойств, в том числе локальных, а также изменения классов объектов. Первые осуществляются действиями, созданными при помощи оператора изменения свойства, вторые - при помощи операторов добавления / изменения класса объектов.
Каждый раз, когда действие выполняется, в зависимости от контекста выполнения д ля него определяется текущая сессия. Например, если действие вызывается как обработчик некоторого события формы (наиболее частый случай), то текущей сессией для него будет сессия этой формы. Также, к примеру, текущая сессия может изменяться при использовании оператора новой сессии.
Если действие в процессе выполнения обращается к некоторому свойству, то его значение вычисляется с учетом изменений, сделанных в текущей сессии этого действия.
Для сессии поддерживаются две основные операции - применение и отмена*, *а также набор операторов для работы с изменениями (в том числе получением предыдущего значения в сессии).
Отметим, что сессии изменений не является потокобезопасными, поэтому при использовании операторов, которые явно или неявно выполняют действия в новом потоке и при этом не блокируют свой поток выполнения, крайне не рекомендуется обращаться к текущей сессии после их выполнения (например такими "многопоточными" операторами являются операторы нового потока или асинхронного открытия формы). В этом случае рекомендуется всегда создавать новую сессию.