Udostępnij za pośrednictwem


Przepływy pracy schematów blokowych

Schemat blokowy to dobrze znany paradygmat projektowania programów. Działanie schematu blokowego jest zwykle używane do implementowania niesekwencyjnych przepływów pracy, ale może służyć do sekwencyjnych przepływów pracy, jeśli nie FlowDecision są używane żadne węzły.

Struktura przepływu pracy schematu blokowego

Działanie schematu blokowego to działanie, które zawiera kolekcję działań do wykonania. Schematy blokowe zawierają również elementy sterowania przepływem, takie jak FlowDecision i FlowSwitch<T> bezpośrednie wykonywanie między zawartymi działaniami na podstawie wartości zmiennych.

Typy węzłów przepływu

Różne typy elementów są używane w zależności od typu sterowania przepływem wymaganego podczas wykonywania elementu. Typy elementów schematu blokowego obejmują:

  • FlowStep — Modeluje jeden krok wykonywania w schemacie blokowym.

  • FlowDecision — Wykonywanie gałęzi na podstawie warunku logicznego, podobnego do If.

  • FlowSwitch — Wykonywanie gałęzi na podstawie przełącznika wyłącznego, podobnego do Switch<T>.

Każdy link ma właściwość definiującą ActionActivityAction element , który może służyć do wykonywania działań podrzędnych, oraz co najmniej jedną Next właściwość definiującą element lub elementy do wykonania po zakończeniu wykonywania bieżącego elementu.

Tworzenie podstawowej sekwencji działań za pomocą węzła FlowStep

Aby modelować podstawową sekwencję, w której wykonywane są z kolei dwa działania, FlowStep używany jest element. W poniższym przykładzie dwa FlowStep elementy są używane do wykonywania dwóch działań w sekwencji.

<Flowchart>
  <FlowStep>
    <Assign DisplayName="Get Name">
      <Assign.To>
        <OutArgument x:TypeArguments="x:String">[result]</OutArgument>
      </Assign.To>
      <Assign.Value>
        <InArgument x:TypeArguments="x:String">["User"]</InArgument>
      </Assign.Value>
    </Assign>
    <FlowStep.Next>
      <FlowStep>
        <WriteLine Text="Hello, " & [result]/>
      </FlowStep>
    </FlowStep.Next>
  </FlowStep>
</Flowchart>

Tworzenie schematu blokowego warunkowego za pomocą węzła FlowDecision

Aby modelować węzeł przepływu warunkowego w przepływie pracy schematu blokowego (czyli w celu utworzenia łącza, który działa jako symbol decyzyjny tradycyjnego schematu blokowego), FlowDecision używany jest węzeł. Właściwość Condition węzła jest ustawiona na wyrażenie, które definiuje warunek, a True właściwości i False są ustawione na FlowNode wystąpienia do wykonania, jeśli wyrażenie zwróci wartość true lub false. W poniższym przykładzie pokazano, jak zdefiniować przepływ pracy korzystający z węzła FlowDecision .

<Flowchart>
  <FlowStep>
    <Read Result="[s]"/>
    <FlowStep.Next>
      <FlowDecision>
        <IsEmpty Input="[s]" />
        <FlowDecision.True>
          <FlowStep>
            <Write Text="Empty"/>
          </FlowStep>
        </FlowDecision.True>
        <FlowDecision.False>
          <FlowStep>
            <Write Text="Non-Empty"/>
          </FlowStep>
        </FlowDecision.False>
      </FlowDecision>
    </FlowStep.Next>
  </FlowStep>
</Flowchart>

Tworzenie przełącznika wyłącznego za pomocą węzła FlowSwitch

Aby modelować schemat blokowy, w którym wybrano jedną ścieżkę wyłączną na podstawie pasującej wartości, FlowSwitch<T> używany jest węzeł. Właściwość jest ustawiona Expression na Activity<TResult> parametr typu Object , który definiuje wartość, aby dopasować opcje do wyboru. Właściwość Cases definiuje słownik kluczy i FlowNode obiektów, które mają być zgodne z wyrażeniem warunkowym, oraz zestaw FlowNode obiektów definiujących sposób przepływu wykonywania, jeśli dany przypadek jest zgodny z wyrażeniem warunkowym. Definiuje FlowSwitch<T> również właściwość definiującą Default sposób przepływu wykonywania, jeśli żadne przypadki nie są zgodne z wyrażeniem warunku. W poniższym przykładzie pokazano, jak zdefiniować przepływ pracy, który używa FlowSwitch<T> elementu.

<Flowchart>
  <FlowSwitch>
    <FlowStep x:Key="Red">
      <WriteRed/>
    </FlowStep>
    <FlowStep x:Key="Blue">
      <WriteBlue/>
    </FlowStep>
    <FlowStep x:Key="Green">
      <WriteGreen/>
    </FlowStep>
  </FlowSwitch>
</Flowchart>