Определение области и видимости действия
Определение области и видимость определения действия, как и область и видимость объекта, ― это возможность других объектов или действий работать с элементами этого действия. Определение действия выполняется следующими реализациями.
Определение элементов (объектов Argument, Variable и ActivityDelegate, а также дочерних действий), доступ к которым действие предоставляет для других пользователей.
Реализация логики выполнения действия
Эта реализация может включать элементы, доступ к которым не предоставляется получателями действия, но которые скорее являются деталями реализации. Так же как и в определении типа, модель действия позволяет автору квалифицировать видимость элемента действия в отношении создаваемого определения действия. Эта видимость управляет аспектами использования элемента, например областями определения данных.
Область
Помимо определения области данных, с помощью видимости модели действия можно ограничить доступ к другим аспектам действия, например проверке, отладке, отслеживанию или трассировке. С помощью видимости и определения области свойства выполнения ограничивают характеристики выполнения конкретной областью определения. Вторичные корни используют видимость и определение области для ограничения состояния, записываемого действием CompensableActivity областью определения, в которой применяются подлежащие компенсации действия.
Определение и использование
Рабочий процесс написан путем создания новых действий путем наследования от базовых классов действий и использования действий из встроенной библиотеки действий. Чтобы использовать действие, автор действия должен настроить видимость каждого компонента его определения.
Элементы действия
Модель действия определяет аргументы, переменные, делегаты и дочерние действия, доступ к которым действие предоставляет получателям. Каждый из этих элементов может быть объявлен как public
или private
. Элементы public настраиваются объектом-получателем действия, а элементы private
используют реализацию, назначенную действию автором. Существуют следующие правила видимости для определения области данных.
Открытые элементы и открытые элементы открытых дочерних действий могут ссылаться на открытые переменные.
Закрытые элементы и открытые элементы открытых дочерних действий могут ссылаться на аргументы и закрытые переменные.
Элемент, который может задаваться объектом-получателем действия, нельзя делать закрытым.
Режимы разработки
Настраиваемые действия определяются с помощью действия NativeActivity, Activity, CodeActivity или AsyncCodeActivity. Действия, которые наследуют от этих классов, могут предоставлять доступ к элементам разных типов с различной видимостью.
NativeActivity
Действия, которые наследуют от действия NativeActivity, имеют режим, написанный с помощью императивного кода, их также можно определять с помощью существующих действий. При создании действий на основе действия NativeActivity предоставляется доступ ко всем возможностям среды выполнения. Любой элемент такого действия можно определить с помощью открытой или закрытой видимости. Исключениями являются аргументы, которые можно объявлять только как public
.
Элементы классов, которые наследуют от действия NativeActivity, объявляются в среде выполнения с помощью структуры NativeActivityMetadata, которая передается методу CacheMetadata.
Действие (Activity)
Действия, создаваемые с помощью действия Activity, имеют режим, который сконструирован исключительно путем составления других действий. Класс Activity имеет одно дочернее действие реализации, получаемое средой выполнения с помощью реализации Implementation. Действие, наследующее от действия Activity, может определять открытые аргументы, открытые переменные, импортируемые ActivityDelegates и импортируемые Activities.
Импортируемые ActivityDelegates и Activities объявляются как открытые дочки действия, при этом действие не может планировать их напрямую. Эти данные используются во время проверки во избежание выполнения проверок с использованием родителя в тех местах, где действие никогда не будет выполняться. Кроме того, импортируемые дочерние действия, как и открытые дочерние действия, могут указываться по ссылке и планироваться реализацией действия. Это означает, что действие, которое импортирует действие Activity1, может содержать в своей реализации Sequence, которая планирует Activity1.
CodeActivity/ AsyncCodeActivity
Этот базовый класс используется для создания режима на императивном коде. Действия, наследуемые от этого класса, имеют доступ только к предоставляемым ими аргументам. Это означает, что эти действия могут предоставлять только открытые аргументы. Другие элементы или видимости к этим действиям не применяются.
Сводка видимостей
В следующей таблице кратко суммированы данные, приведенные в этом разделе.
Тип члена | NativeActivity | Действие (Activity) | CodeActivity/ AsyncCodeActivity |
---|---|---|---|
Аргументы | Открытый/закрытый | Общедоступный | Неприменимо |
Переменные | Открытый/закрытый | Общедоступный | Неприменимо |
Дочерние действия | Открытый/закрытый | Открытый, один фиксированный закрытый дочерний элемент, определенный в реализации. | Неприменимо |
ActivityDelegates | Открытый/закрытый | Общедоступный | Неприменимо |
В общем, элемент, который не может задаваться объектом-получателем действия, нельзя делать открытым.
Свойства выполнения
В некоторых сценариях полезно ограничить область конкретного свойства выполнения открытыми дочками действия. Коллекция ExecutionProperties предоставляет эту возможность с помощью метода Add. У этого метода есть логический параметр, указывающий, ограничено ли данное свойство всеми дочерними элементами или только открытыми дочерними элементами. Если этому параметру задано значение true
, то свойство будет видимо только открытым элементам, а также открытым элементам открытых дочерних элементов этих элементов.
Вторичные корни
Вторичный корень ― это внутренний механизм среды выполнения для сопоставления состояния для действий компенсации. Когда действие CompensableActivity завершило работу, его состояние не очищается немедленно. Вместо этого среда выполнения сохраняет состояние во вторичном корне до завершения компенсации. Среды местоположения, записываемые с помощью вторичного корня, соответствуют области определения, в которой используется компенсируемое действие.