| name | layer-interface |
| description | Construindo a camada interfaces. Use para criar ou alterar GUI JavaFX, TUI textual ou bootstrap de entrada. Não use para regra de negócio (use layer-application), adapters (use layer-infrastructure) ou modelagem de domínio (use layer-domain). |
Skill: Camada Interface
Quando usar
- Criar ou alterar controller JavaFX
- Criar ou alterar componente TUI/TTY
- Adicionar menu, botão, tela, painel de log ou fluxo de interação
- Ajustar bootstrap entre GUI e TUI
Responsabilidade da camada
Interfaces recebem input e exibem output.
Esta camada:
- chama use cases
- apresenta progresso e resultado
- transforma input do usuário em comandos de aplicação
- decide forma de renderização, não regra de recuperação
Instruções
1. Delegar corretamente
2. Respeitar a interface alvo
3. Não vazar responsabilidades
Critical
- GUI e TUI devem consumir os mesmos use cases — comportamento divergente indica lógica duplicada em algum dos lados
- Controller com
if sobre distro ou serviço está fazendo trabalho do use case — mova a lógica
- Política de retry, timeout ou fallback técnico pertence ao use case, não ao controller
- Mensagens ao usuário podem ser adaptadas por interface, mas a verdade do resultado vem do use case
Exemplos
Exemplo 1: Controller JavaFX
- Botão chama
executeFixActionUseCase.execute(AUDIO)
- Desabilita interação durante execução
- Mostra resultado amigável e logs estruturados do
RecoveryResult
- Reabilita ao final — sucesso ou falha
Exemplo 2: Menu TUI
- Lista ações suportadas
- Usuário escolhe opção por número/tecla
- Componente chama o mesmo use case da GUI
- Saída renderizada no terminal via
TuiPrinter
Troubleshooting
GUI e TUI têm comportamento diferente para a mesma ação
- Causa: lógica duplicada em ambas as interfaces
- Solução: Consolidar no use case; ambas as interfaces chamam o mesmo use case
TUI exibe stacktrace ao usuário
- Causa: exception não tratada no componente
- Solução: Capturar exception, transformar em
RecoveryResult com success=false e mensagem legível
Controller cresce com múltiplos if condicionais
- Causa: decisões que pertencem ao use case estão vazando para a interface
- Solução: Mover decisões para o use case correspondente; controller apenas renderiza o resultado
Consulte também