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