# Componentes Smart × Dumb

Recentemente estive estudando arquitetura de projetos e me deparei com o conceito de componentes *Smart* e *Dumb*. Esse conceito ajuda manter uma arquitetura limpa, delegando funções para diferentes componentes e os separando por **componentes funcionais** e **componentes de apresentação**.

**Componentes funcionais (Smart)**  
São responsáveis por alguma logíca de negócio na aplicação, seja manipulação de dados, envio de requisições, ou outra. Também são responsáveis por passar as informações necessárias para os devidos *dumb components*.

**Componentes de apresentação (Dumb)**  
São responsáveis apenas e exclusivamente pelo visual da aplicação. Eles apenas enxergam eles mesmos e não precisam saber nada do resto da aplicação. Podem também exigir parâmetros para uso próprio, como um componente de detalhe de usuário exigir o parâmetro `user` com informações sobre o usuário em questão.  
Podem emitir eventos para enviar informações para fora.
