Componentes
Os componentes são pedaços de software autocontidos projetados como caixas-pretas que recebem outros componentes (ou nenhum) para executar suas tarefas. O objetivo principal é desacoplar seções de código e maximizar a testabilidade.
Estrutura de Diretórios
Todos os componentes DEVEM ser definidos dentro de um diretório dedicado contendo pelo menos estes quatro arquivos:
component.ts- Contém o código de implementação do componentetypes.ts- Contém a interface do componente e os tipos expostoserrors.ts- Contém todas as classes de erro exportadasindex.ts- Exporta a API pública do componente
Exemplo de Estrutura
src/
└── components/
└── my-component/
├── component.ts
├── types.ts
├── errors.ts
└── index.tsArquivo de Tipos
Os componentes obedecem a uma interface que define sua API pública. Essa interface pode ser compartilhada entre componentes intercambiáveis ou usada para entender os métodos expostos pelo componente.
Todos os componentes que possuem sua própria interface DEVEM defini-la em um types.ts arquivo dentro do diretório do componente.
Outros tipos expostos pelo componente TAMBÉM DEVEM ser colocados neste arquivo.
Exemplo: types.ts
types.tsTipos Compartilhados
Tipos compartilhados entre múltiplos componentes, como interfaces comuns, DEVEM ser colocados em um types.ts arquivo no diretório raiz do código-fonte do projeto (/src/types.ts).
Arquivo do Componente
O arquivo do componente contém a função criadora do componente. Essa função segue uma convenção específica de nomeação e estrutura.
Convenção de Nomeação
As funções criadoras de componentes DEVEM ser nomeadas como: create + ComponentName + Component
Exemplo: createMyNewComponent
Assinatura da Função
A função criadora DEVE:
Receber um objeto components como primeiro parâmetro contendo todas as dependências
Opcionalmente receber parâmetros adicionais de configuração
Retornar um objeto contendo os métodos expostos (públicos)
Estrutura do Componente
No início da função criadora do componente:
Extrair dependências do objeto components
Inicializar variáveis comuns (por exemplo, loggers, configuração)
Definir funções auxiliares internas
Definir métodos públicos
Retornar a API pública
Exemplo: component.ts
component.tsArquivo de Erros
O arquivo de erros contém classes de erro customizadas que um componente pode lançar. Esses erros podem ser usados em outros componentes ou controladores para identificar e tratar corretamente condições de erro específicas.
Exemplo: errors.ts
errors.tsBoas Práticas de Tratamento de Erros
Criar classes de erro específicas para diferentes condições de erro
Incluir mensagens de erro significativas
Defina o
nameproperty to match the class name for easier debuggingDocumentar quais erros podem ser lançados por cada método público
Arquivo Index
O arquivo index serve como ponto de entrada público para o componente, exportando apenas o que deve ser acessível para outras partes da aplicação.
Exemplo: index.ts
index.tsBoas Práticas
Responsabilidade Única - Cada componente deve ter um propósito claro
Dependências Explícitas - Todas as dependências devem ser injetadas através do parâmetro components
Imutabilidade - Preferir estruturas de dados imutáveis sempre que possível
Tratamento de Erros - Usar classes de erro customizadas para diferentes condições de erro
Registro (Logging) - Usar o logger para depuração e monitoramento
Segurança de Tipos - Aproveitar o sistema de tipos do TypeScript ao máximo
Documentação - Documentar métodos complexos e lógica de negócio
Ciclo de Vida do Componente
Alguns componentes podem precisar executar operações de configuração ou limpeza. WKC fornece métodos de ciclo de vida:
[START_COMPONENT]- Chamado quando o componente inicia[STOP_COMPONENT]- Chamado quando o componente para
Veja a Adaptadores seção para exemplos de componentes usando métodos de ciclo de vida.
Atualizado