Aula 13 – Boas Práticas e Arquitetura 🏰
Escrever código que funciona é apenas o primeiro passo. Como desenvolvedores profissionais, nosso objetivo é escrever código que seja fácil de ler, testar e manter.
🏛️ Separação de Responsabilidades
Um erro comum é colocar muita lógica dentro do componente (.vue). Siga a regra de ouro: Componentes devem apenas exibir dados e emitir eventos.
| Camada | Função | Exemplo |
|---|---|---|
| Views | Páginas principais | HomeView.vue |
| Components | Peças reutilizáveis | BaseButton.vue |
| Stores | Estado Compartilhado | userStore.js |
| Services | Comunicação Externa | authService.js |
| Utils | Funções Auxiliares | formatDate.js |
🧼 Clean Code no Vue
- Nomes de Componentes: Use sempre pelo menos duas palavras para evitar conflitos com tags HTML (ex:
UserCardem vez deCard). - Props Tipadas: Sempre valide suas props.
- Composição over Mixins: No Vue 3, prefira extrair lógica repetida para Composables (
useAlgo.js). - Emits Declarados: Use
defineEmitspara documentar o que o componente faz.
📊 Estrutura de Composable
graph LR
A[Lógica Repetida] --> B[useCounter.js]
B --> C[Componente A]
B --> D[Componente B]
B --> E[Componente C]
Exemplo de um Composable simples:
// src/composables/useMouse.js
import { ref, onMounted, onUnmounted } from 'vue'
export function useMouse() {
const x = ref(0)
const y = ref(0)
function update(event) {
x.value = event.pageX
y.value = event.pageY
}
onMounted(() => window.addEventListener('mousemove', update))
onUnmounted(() => window.removeEventListener('mousemove', update))
return { x, y }
}
🧠 Padrão de Nomenclatura
Dica de Ouro
Componentes que são usados apenas uma vez (como Header, Footer) devem ter o prefixo The (ex: TheNavbar.vue). Componentes reutilizáveis devem ter prefixos como Base, App ou V (ex: BaseButton.vue).
📝 Exercício
- Qual a vantagem de usar Composables em vez de colocar toda a lógica no componente?
- Refatore um componente seu que tenha mais de 100 linhas de lógica para usar um Composable ou um Service.
- Por que devemos evitar nomes de uma única palavra para componentes?
🚀 Próxima Aula: Vamos deixar nossa aplicação bonita e responsiva com Scoped CSS e Tailwind!