Saltar al contenido principal

TODO: Ajustar isso daqui pra explicar sobre integradores e deixar a doc de BaseIntegrator para uma referência técnica

BaseIntegrator<TInput, TOutput>

A classe abstrata BaseIntegrator<TInput, TOutput> é uma base para implementar integrações padronizadas com métricas, tratamento de erros e execução controlada.

Visão Geral​

Esta classe fornece um framework estruturado para executar integrações seguindo o padrão ETL (Extract, Transform, Load) com monitoramento de métricas e tratamento centralizado de erros.

Assinatura​

public abstract class BaseIntegrator<TInput, TOutput>

Parâmetros de Tipo​

  • TInput: Tipo dos dados de entrada (resultado da consulta)
  • TOutput: Tipo dos dados de saída (após processamento e envio)

Funcionalidades Principais​

🔄 Fluxo de Execução Padronizado​

A classe implementa um fluxo de execução consistente:

  1. Query: Obtenção dos dados
  2. Parse: Transformação dos dados
  3. Send: Envio/processamento dos dados

📊 Métricas Automáticas​

  • Contagem de execuções
  • Contagem de erros por tipo
  • Métricas de tempo por etapa
  • Métricas de throughput (registros processados)

🛡️ Tratamento de Erros​

  • Captura e tratamento centralizado de exceções
  • Logging automático de contexto de erro
  • Retorno padronizado com IntegrationResult<TOutput>

Métodos Abstratos​

Os seguintes métodos devem ser implementados pelas classes filhas:

Query()​

protected abstract Task<TInput> Query();

Responsabilidade: Obter os dados que serão processados pela integração.

Retorna: Os dados brutos do tipo TInput.

Parse(TInput data)​

protected abstract Task<TOutput> Parse(TInput data);

Responsabilidade: Transformar os dados de entrada no formato necessário.

Parâmetros:

  • data: Dados obtidos pelo método Query()

Retorna: Dados transformados do tipo TOutput.

Send(TOutput parsedData)​

protected abstract Task<TOutput> Send(TOutput parsedData);

Responsabilidade: Enviar ou processar os dados transformados.

Parâmetros:

  • parsedData: Dados transformados pelo método Parse()

Retorna: Resultado final do tipo TOutput.

Métodos Virtuais​

Hooks de Execução​

PreExecution()​

protected virtual void PreExecution()

Executado antes do início do fluxo principal. Útil para inicializações específicas.

PostExecution(TOutput result)​

protected virtual void PostExecution(TOutput result)

Executado após o sucesso do fluxo principal. Útil para limpeza ou logging adicional.

Parâmetros:

  • result: Resultado final da integração

OnError(Exception ex)​

protected virtual void OnError(Exception ex)

Executado quando ocorre uma exceção durante a execução.

Parâmetros:

  • ex: Exceção capturada

Comportamento padrão: Escreve a mensagem de erro no console.

Métodos de Validação​

ValidateQuery(TInput data)​

protected virtual void ValidateQuery(TInput data)

Valida os dados obtidos pela consulta.

Comportamento padrão: Lança exceção se data for null.

ValidateParse(TOutput parsedData)​

protected virtual void ValidateParse(TOutput parsedData)

Valida os dados após o processamento.

Comportamento padrão: Lança exceção se parsedData for null.

Métrica de Throughput​

GetRecordCount(TOutput result)​

protected virtual int GetRecordCount(TOutput result)

Calcula o número de registros processados para métricas de throughput.

Comportamento padrão:

  • Se result implementa IEnumerable: retorna a contagem de itens
  • Caso contrário: retorna 1

Método de Execução​

ExecuteInternal(Func<Task<TInput>> queryFactory)​

protected async Task<IntegrationResult<TOutput>> ExecuteInternal(Func<Task<TInput>> queryFactory)

Método principal que orquestra toda a execução da integração.

Parâmetros:

  • queryFactory: Factory function para obtenção dos dados

Retorna: IntegrationResult<TOutput> indicando sucesso ou falha

Como Usar​

Esta classe não deve ser herdada diretamente. Em vez disso, use uma das implementações públicas:

  • Para integração baseada em mensagens: herde de MessageProcessorIntegrator<TMessage, TInput, TOutput>
  • Para integração baseada em polling: herde de PoolingIntegrator<TInput, TOutput>

Consulte a documentação específica de cada implementação para exemplos de uso.

Dependências​

  • IIntegrationMetricProvider: Interface para coleta de métricas
  • IntegrationExecutionContext: Contexto de execução com informações da integração
  • IntegrationResult<T>: Classe de resultado padronizada

Considerações de Performance​

  • Todas as etapas principais são medidas automaticamente
  • O contexto de execução é gerenciado automaticamente
  • Métricas são coletadas de forma não-invasiva ao fluxo principal