活动定义的作用域和可见性,就像对象的作用域和可见性一样,指的是其他对象或活动访问该活动成员的能力。 活动定义由以下实现执行:
确定活动向用户公开的成员(Argument、Variable 和 ActivityDelegate对象,以及子活动)。
实现活动操作过程的执行逻辑
该实现可能涉及未向活动的使用者公开但却作为该实现的详细信息的成员。 与类型定义类似,活动模型允许作者限定活动成员在所定义活动中的可见性。 此可见性控制成员使用的各个方面,如数据范围。
范围
除了数据范围之外,活动模型可见性还可以限制对活动的其他方面(例如验证、调试、跟踪或跟踪)的访问。 执行属性使用可见性和范围将执行特征限制为特定的定义范围。 辅助根使用可见性和范围,将 CompensableActivity 捕获的状态约束到使用补偿活动的定义范围。
定义和使用
通过创作新活动来编写工作流,具体方法是:从基活动类继承并使用内置活动库中的活动。 若要使用活动,活动作者必须配置其定义的每个组件的可见性。
活动成员
活动模型定义活动提供给使用者的参数、变量、委托和子活动。 每个成员都可以声明为 public
或 private
。 公共成员由活动的使用者配置,而 private
成员则使用活动作者固定的实现。 数据范围的可见性规则如下:
公共成员和公共子活动的公共成员可引用公共变量。
私有成员和公共子活动的公共成员可引用参数和私有变量。
绝对不要将可由活动的使用者设置的成员设置为私有成员。
创作模型
使用NativeActivity、Activity、CodeActivity或AsyncCodeActivity定义自定义活动。 派生自这些类的活动可以公开具有不同可见性的不同成员类型。
NativeActivity
派生自 NativeActivity 的活动具有以命令性代码编写的行为,并且可以选择使用现有活动进行定义。 从 NativeActivity 派生活动可授予对运行时公开的所有功能的访问权限。 此类活动的任何成员都可以使用公共或私有可见性来定义,但参数除外,这些参数只能声明为 public
。
派生自 NativeActivity 的类的成员通过将 NativeActivityMetadata 结构体传递给 CacheMetadata 方法来向运行时进行声明。
活动
使用 Activity 创建的活动,其行为是通过对其他活动的组合而严格设计的。 Activity 类具有一个实现子活动,该活动由运行时通过使用 Implementation 获取。 派生自 Activity 的活动可定义公共自变量、公共变量、导入的 ActivityDelegates 以及导入的 Activities。
导入的 ActivityDelegates 和 Activities 声明为活动的公共子活动,但不能由活动直接计划。 验证期间使用此信息,可避免在从不执行活动的位置运行面向父活动的验证。 另外,正如公共子活动一样,导入的子活动也可由活动的实现进行引用和计划。 这意味着,用来导入 Activity1 的活动可将 Sequence 包含在其计划 Activity1 的实现中。
CodeActivity/AsyncCodeActivity
此基类用于在命令性代码中创作行为。 派生自此类的活动仅具有对其公开的自变量的访问权限。 这意味着仅这些活动能够公开的成员为公共自变量。 任何其他成员或可见性都不适用于这些活动。
可见性摘要
下表总结了本节前面的信息。
成员类型 | NativeActivity | 活动 | CodeActivity/AsyncCodeActivity |
---|---|---|---|
论据 | 公共/专用 | 公众 | 不適用 |
变量 | 公共/专用 | 公众 | 不適用 |
儿童活动 | 公共/专用 | 公共,在实现中定义的一个固定的私有子活动。 | 不適用 |
ActivityDelegates | 公共/专用 | 公众 | 不適用 |
一般来说,活动的使用者无法设置的成员不应成为公共成员。
执行属性
在有些方案中,将特定执行属性的范围限定为某活动的公共子活动很有用。 集合ExecutionProperties通过Add方法提供此功能。 此方法具有一个 Boolean 参数,该参数指示是将特定属性的范围限定为所有子活动,还是只限定为公共活动。 如果此参数设置为 true
,则属性仅对公共成员及其公共子活动的公共成员可见。
辅助根
辅助根是运行时用于管理补偿活动状态的内部机制。 CompensableActivity完成运行后,其状态不会立即清除。 而是由运行时将此状态维护在辅助根中,直到补偿段完成。 使用次级根捕获的位置环境与补偿活动的定义范围相对应。