Introdução
Em desenvolvimento de software, especialmente em frameworks Javascript como React, Vue e Angular, os conceitos de Smart Components e Dumb Components são fundamentais para a criação de interfaces de usuário mais organizadas, reutilizáveis e eficientes. Mas o que são esses conceitos?
Para ilustrar, vamos imaginar que sua aplicação é um apiário (conjunto de colmeias) e que objetivo da sua aplicação é justamente a produção de mel.
Smart Components
No nosso apiário as abelhas rainhas são os Smart Components. Elas são responsáveis por tomar decisões importantes dentro de cada colmeia. Elas fazem o seu controle, determinam a produção de novas abelhas e organizam as tarefas das abelhas operárias. Elas têm uma visão completa do funcionamento de sua colmeia e gerenciam as operações para garantir que tudo funcione sem problemas. As abelhas rainhas:
- Têm muita responsabilidade.
- Tomam decisões complexas.
- Gerenciam a comunicação entre diferentes partes da colmeia.
- Sabem quais tarefas estão sendo executadas e quando precisam ser concluídas.
O papel principal de um Smart Component é gerenciar o estado e a lógica da aplicação ou de parte dela. Isso significa que ele controla como obter as informações, como exibir e como essas informações mudam ao longo do tempo.
Em resumo, Smart Components são a parte ativa e inteligente de uma aplicação. Eles são os responsáveis por fazer com que as coisas aconteçam, respondendo às interações do usuário e às mudanças nos dados.
Um exemplo prático e bem básico utilizando Flutter é a própria tela de contagem de clicks:
class CounterApp extends StatefulWidget { @override _CounterAppState createState() => _CounterAppState();
} class _CounterAppState extends State<CounterApp> { int _counter = 0; void _incrementCounter() { setState(() { _counter++; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Contador'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'Você pressionou o botão $_counter vezes', ), ElevatedButton( onPressed: _incrementCounter, child: Text('Contar'), ), ], ), ), ); }
}
Neste exemplo, o CounterApp é um Smart Component. Ele gerencia o estado do contador _counter
, define a lógica para incrementar o contador _incrementCounter
e renderiza a interface do usuário.
Dumb Component
Já as abelhas operárias do nosso apiário são os Dumb Components. Elas têm tarefas mais simples e específicas, como coletam néctar, produzem mel e cuidam das larvas.
Apesar da tradução para o português ser “burro”, o “dumb” trás a ideia de que esses componentes são mais simples e sem nenhuma regra de negócio, assim como as operárias. Elas não precisam entender o funcionamento completo do apiário ou sequer da colmeia, elas apenas fazem bem suas tarefas com base nas instruções que recebem das abelhas rainhas. As abelhas operárias:
- Têm responsabilidade limitada.
- Realizam tarefas específicas e repetitivas.
- Não tomam decisões complexas.
- Dependem das instruções das abelhas rainhas.
Um exemplo disso em Flutter seria um botão customizável que recebe uma cor, um texto e uma função a ser executada ao ser pressionado. Esse botão não sabe o que a função faz, apenas a executa quando necessário:
class CustomButton extends StatelessWidget { final Color color; final String text; final VoidCallback onPressed; const CustomButton({ super.key, required this.color, required this.text, required this.onPressed, }); @override Widget build(BuildContext context) { return ElevatedButton( style: ElevatedButton.styleFrom( primary: color, ), onPressed: onPressed, child: Text(text), ); }
}
O uso desse botão, dentro de uma aplicação seria:
class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Minha Página'), ), body: Center( child: CustomButton( color: Colors.blue, text: 'Clique aqui', onPressed: () { // Lógica a ser executada quando o botão for pressionado print('Botão pressionado!'); }, ), ), ); }
}
Neste exemplo demonstra como criar um componente simples e reutilizável em Flutter, focando apenas na apresentação visual.
E porque usar?
Usar esses conceitos trás diversas vantagens, além de estar alinhada com conceitos do SOLID e do Clean. Como por exemplo:
- Separação de responsabilidades: Facilita a compreensão e a manutenção do código;
- Reutilização: Dumb Components podem ser usados em diversos lugares;
- Teste: Facilita a criação de testes unitários, pois os componentes são mais isolados;
- Melhora a performance: Ao separar a lógica da apresentação, é possível otimizar a renderização e alocação de memória;
Conclusão
Ao longo desta conversa, exploramos a fundo os conceitos de Smart e Dumb Components e como eles se relacionam com os princípios SOLID e Clean Code.
- Smart Components são os “cérebros” da aplicação, responsáveis por gerenciar o estado, tomar decisões e coordenar outras partes do sistema.
- Dumb Components são os “operários” da aplicação, focados em exibir informações na tela de forma clara e concisa.
A analogia com as abelhas e a colmeia é uma forma interessante de visualizar essa divisão de responsabilidades. Cada abelha tem um papel específico, e todas trabalham juntas para o bem da colmeia e do apiario. Da mesma forma, cada componente em uma aplicação tem uma função específica, e todos trabalham juntos para criar uma experiência de usuário coesa.
Em conclusão, a utilização de Smart e Dumb Components é uma prática recomendada para o desenvolvimento de aplicações modernas. Ao entender os princípios por trás dessa abordagem, você será capaz de criar software mais robusto, escalável e fácil de manter.
E ai? Quais outros tópicos você quer ver por aqui? Você concorda, discorda? Deixe seu comentário!
Referência Bibliográfica:
Componentes React: Dumb vs Smart, NCB{code}. Disponível em: https://www.tautorn.com.br/docs/react/dumb-e-smart-components Acesso em 29 de julho de 2024.
Smart e Dumb Components: Maximizando a Eficiência do Desenvolvimento Front-End, ADSON MARTINS. Disponível em: https://medium.com/@adson.martins982/smart-e-dumb-components-maximizando-a-efici%C3%AAncia-do-desenvolvimento-front-end-817acd6f36f1. Acesso em 29 de julho de 2024.
Dumb e Smart Components, TAUTORN. Disponível em: https://www.tautorn.com.br/docs/react/dumb-e-smart-components. Acesso em 29 de julho de 2024.
Foto de Annie Spratt na Unsplash
Discover more from Coursity
Subscribe to get the latest posts sent to your email.