Partilhar via


Definição de Atividade, Escopo e Visibilidade

Escopo e visibilidade da definição da atividade, assim como o escopo e a visibilidade de um objeto, é a capacidade de outros objetos ou atividades de acessar membros da atividade. A definição da atividade é realizada pelas seguintes implementações:

  1. Determinar os membros (Argument, Variable, e ActivityDelegate objetos, e atividades filhas) que uma atividade expõe aos seus usuários.

  2. Implementação da lógica de execução da atividade

A implementação pode envolver membros que não estão expostos aos consumidores da atividade, mas são detalhes da implementação. Semelhante à definição de tipo, o modelo de atividade permite que um autor qualifique a visibilidade de um membro da atividade em relação à definição da atividade que está sendo definida. Essa visibilidade rege aspetos do uso dos membros, como o escopo de dados.

Âmbito

Além do escopo dos dados, a visibilidade do modelo de atividade pode restringir o acesso a outros aspetos da atividade, como validação, depuração, rastreamento ou rastreamento. As propriedades de execução usam visibilidade e escopo para restringir as características de execução a um escopo específico de definição. As raízes secundárias usam a visibilidade e o escopo para restringir o estado capturado por a CompensableActivity ao escopo de definição em que as atividades compensáveis são usadas.

Definição e utilização

Um fluxo de trabalho é escrito criando novas atividades herdando de classes de atividade base e usando atividades da Biblioteca de Atividades Interna. Para usar uma atividade, o autor da atividade deve configurar a visibilidade de cada componente de sua definição.

Membros da Atividade

O modelo de atividade define os argumentos, variáveis, delegados e atividades filhas que a atividade disponibiliza aos consumidores. Cada um destes membros pode ser declarado como public ou private. Os membros públicos são configurados pelo consumidor da atividade, enquanto private os membros usam uma implementação fixada pelo autor da atividade. As regras de visibilidade para o escopo de dados são as seguintes:

  1. Os membros públicos e os membros públicos de atividades infantis públicas podem referenciar variáveis públicas.

  2. Os membros privados e os membros públicos de atividades infantis públicas podem referenciar argumentos e variáveis privadas.

Um membro que pode ser definido pelo consumidor de uma atividade nunca deve ser tornado privado.

Criação de modelos

As atividades personalizadas são definidas usando NativeActivity, Activity, CodeActivity, ou AsyncCodeActivity. As atividades que derivam dessas classes podem expor diferentes tipos de membros com diferentes visibilidades.

NativeActivity

As atividades que derivam de NativeActivity um comportamento que é escrito em código imperativo e, opcionalmente, podem ser definidas usando atividades existentes. Atividades derivadas de concede acesso a todos os recursos expostos pelo tempo de NativeActivity execução. Qualquer membro de tal atividade pode ser definido usando visibilidade pública ou privada, exceto argumentos, que só podem ser declarados como public.

Membros de classes derivadas de são declarados para o tempo de NativeActivity execução usando o NativeActivityMetadata struct passado para o CacheMetadata método.

Atividade

As atividades criadas usando Activity têm um comportamento que é projetado estritamente através da composição de outras atividades. A Activity classe tem uma atividade filho de implementação, obtida pelo tempo de execução usando Implementation. Uma atividade derivada de Activity pode definir argumentos públicos, variáveis públicas, ActivityDelegates importados e Atividades importadas.

Atividade importadaDelegados e Atividades são declarados como filhos públicos da atividade, mas não podem ser agendados diretamente pela atividade. Essas informações são usadas durante a validação para evitar a execução de validações voltadas para os pais em locais onde a atividade nunca será executada. Além disso, crianças importadas, assim como crianças públicas, podem ser referenciadas e agendadas pela implementação da atividade. Isso significa que uma atividade que importa uma atividade chamada Atividade1 pode conter um Sequence em sua implementação que agenda a Atividade1.

CodeActivity/ AsyncCodeActivity

Essa classe base é usada para o comportamento de criação em código imperativo. As atividades que derivam dessa classe só têm acesso aos argumentos que expõem. Isso significa que os únicos membros que essas atividades podem expor são argumentos públicos. Nenhum outro membro ou visibilidade se aplica a estas atividades.

Resumo das visibilidades

A tabela a seguir resume as informações anteriores nesta seção.

Tipo de Membro NativeActivity Atividade CodeActivity/ AsyncCodeActivity
Argumentos Público/Privado Público não aplicável
Variáveis Público/Privado Público não aplicável
Atividades Infantis Público/Privado Público, um filho privado fixo definido em Implementação. não aplicável
ActivityDelegates Público/Privado Público não aplicável

Em geral, um membro que não possa ser definido pelo consumidor de uma atividade não deve ser tornado público.

Propriedades de execução

Em alguns cenários, é útil definir o escopo de uma determinada propriedade de execução para os filhos públicos de uma atividade. A ExecutionProperties coleção fornece esse recurso com o Add método. Esse método tem um parâmetro booleano que indica se uma determinada propriedade tem escopo para todos os filhos ou apenas aqueles que são públicos. Se esse parâmetro for definido como true, a propriedade só será visível para membros públicos e membros públicos de seus filhos públicos.

Raízes Secundárias

Uma raiz secundária é o mecanismo interno do tempo de execução para gerenciar o estado para atividades de compensação. Quando um termina de CompensableActivity ser executado, seu estado não é limpo imediatamente. Em vez disso, o estado é mantido pelo tempo de execução em uma raiz secundária até que o episódio de compensação seja concluído. Os ambientes de localização capturados com a raiz secundária correspondem ao escopo de definição em que a atividade Compensable é usada.