活動定義範圍和可視性
就像物件的範圍和可視性一樣,活動定義範圍和可視性是其他物件或活動存取活動成員的能力。 活動定義是由下列實作所執行:
決定活動公開給其使用者的成員 (Argument、Variable 和 ActivityDelegate 物件及子活動)。
實作活動的執行邏輯
此實作所牽涉到的成員可能未公開給活動的消費者,但是為實作的詳細資料。 與型別定義類似,活動模型允許作者限定有關所定義之活動定義的活動成員可視性。 此可視性會控管成員使用的層面,例如資料範圍。
範圍
除了資料範圍以外,活動模型可視性也可以限制存取活動的其他層面,例如驗證、偵錯或追蹤。 執行屬性會使用可視性與範圍,將執行特性限制為特定的定義範圍。 次要根項目會使用可視性與範圍,將 CompensableActivity 所擷取的狀態限制為使用可補償之活動的定義範圍。
定義和使用方式
工作流程的撰寫方式是透過撰寫新的活動,也就是繼承基底活動類別,並使用內建活動程式庫中的活動。 為了能夠使用活動,活動作者必須設定其定義之每一個元件的可視性。
活動成員
活動模型會定義該活動提供給消費者使用的引數、變數、委派和子活動。 這些成員的每一個都可以宣告為 public
或 private
。 Public 成員是由活動的消費者所設定,而 private
成員則會使用活動作者所固定的實作。 資料範圍的可視性規則如下所示:
Public 成員以及 Public 子活動的 Public 成員可以參考 Public 變數。
Private 成員以及 public 子活動的 public 成員可以參考引數和 private 變數。
可由活動的消費者所設定的成員絕對不能為 private。
撰寫模型
自訂活動是使用 NativeActivity、Activity、CodeActivity 或 AsyncCodeActivity 所定義。 衍生自這些類別的活動可以公開具有不同可視性的不同成員型別。
NativeActivity
衍生自 NativeActivity 的活動擁有以命令性程式碼所撰寫的行為,而且可以選擇使用現有的活動加以定義。 從 NativeActivity 衍生活動會授與執行階段所公開之所有功能的存取權。 這類活動的任何成員都可以使用 public 或 private 可視性加以定義,但是只能宣告為 public
的引數除外。
衍生自 NativeActivity 的類別成員會宣告給執行階段,其方式是使用傳遞給 NativeActivityMetadata 方法的 CacheMetadata Struct。
活動
使用 Activity 建立的活動所擁有的行為,只會透過撰寫其他活動加以設計。 Activity 類別有一個子活動實作,這是由執行階段使用 Implementation 所取得。 衍生自 Activity 的活動可以定義 public 引數、public 變數、匯入的 ActivityDelegates 和匯入的 Activities。
匯入的 ActivityDelegates 和 Activities 會宣告為活動的 public 子系,但是不能由活動直接排程。 驗證期間會使用這項資訊,以避免在絕對不會執行活動的位置執行面對父系的驗證。 此外,活動的實作也可以參考和排程匯入的子系,就像 public 子系一樣。 這表示,匯入名為 Activity1 之活動的某項活動可以在排程 Activity1 的實作中包含 Sequence。
CodeActivity/ AsyncCodeActivity
此基底類別會在命令式程式碼中用來撰寫行為。 衍生自這個類別的活動只能存取其所公開的引數。 這表示,只有這些活動可以公開的成員才是 public 引數。 沒有其他成員或可視性會套用到這些活動。
可視性摘要
下表摘要列出本章節稍早的資訊。
成員類型 | NativeActivity | 活動 | CodeActivity/ AsyncCodeActivity |
---|---|---|---|
引數 | Public/ Private | 公開 | 不適用 |
變數 | Public/ Private | 公開 | 不適用 |
Child Activities | Public/ Private | Public,實作中定義的一個固定 private 子系。 | 不適用 |
ActivityDelegates | Public/ Private | 公開 | 不適用 |
一般來說,活動的消費者所無法設定的成員不能為 public。
執行屬性
在某些情況下,將特定執行屬性的範圍設定為活動的 public 子系會很實用。 ExecutionProperties 集合會將 Add 方法提供給這項功能。 這個方法有一個布林參數,可指示特定屬性的範圍為所有子系還是 public 子系。 如果這個參數設定為 true
,此屬性只能讓 public 成員以及其 public 子系的 public 成員看到。
次要根項目
次要根項目是執行階段的內部機制,可管理補償活動的狀態。 當 CompensableActivity 執行完之後,不會立即清除它的狀態。 該狀態會由執行階段的次要根項目所維護,直到補償時段完成為止。 使用次要根項目所擷取的位置環境會對應到使用可補償活動的定義範圍。