Skip to content

Diferenciação entre Componentes "Base" e "The"

Em projetos Vue que adotam uma estrutura modular, é comum usar convenções de nomenclatura para distinguir diferentes tipos de componentes. Uma dessas convenções é o uso dos prefixos "Base" e "The" nos nomes dos componentes. Essa prática ajuda a organizar o código e a entender rapidamente o propósito de cada componente.

Componentes "Base"

Os componentes com o prefixo "Base" são componentes genéricos e reutilizáveis que podem ser utilizados em várias partes da aplicação. Eles geralmente encapsulam um conjunto comum de funcionalidades ou estilos e não têm dependências específicas do contexto em que são usados.

Características dos Componentes "Base":

  1. Reutilizáveis: Projetados para serem reutilizados em diferentes lugares dentro do projeto.
  2. Genéricos: Contêm lógica e estilos básicos que podem ser facilmente personalizados ou estendidos.
  3. Independentes de Contexto: Não possuem dependências específicas do contexto ou estado da aplicação.

Exemplos de Componentes "Base":

  • BaseButton.vue: Um botão genérico que pode ser estilizado de várias formas.
  • BaseModal.vue: Um modal genérico que pode exibir qualquer conteúdo passado como slot.
  • BaseInput.vue: Um campo de entrada genérico que pode ser configurado para diferentes tipos de dados.
vue
<!-- BaseButton.vue -->
<script setup lang="ts">
const emit = defineEmits<{
  (e: "click", event: Event): void;
}>();
withDefaults(
  defineProps<{
    variant?: string;
  }>(),
  {
    variant: "primary",
  }
);
const handleClick = (event: Event) => {
  emit("click", event);
};
</script>

<template>
  <button :class="['base-button', $props.variant]" @click="handleClick">
    <slot />
  </button>
</template>

<style scoped>
.base-button {
  padding: 10px;
  border-radius: 5px;
}
.base-button.primary {
  background-color: blue;
  color: white;
}
.base-button.secondary {
  background-color: gray;
  color: white;
}
</style>

Componentes "The"

Os componentes com o prefixo "The" são componentes únicos e específicos para a aplicação. Eles geralmente representam partes importantes da interface do usuário e são usados apenas uma vez na aplicação, refletindo um contexto ou funcionalidade específica.

Características dos Componentes "The":

  1. Específicos: Projetados para um uso específico e único na aplicação.
  2. Contextuais: Contêm lógica e estilos específicos para um determinado contexto ou funcionalidade.
  3. Dependências: Podem depender de outros componentes ou do estado global da aplicação.

Exemplos de Componentes "The":

  • TheHeader.vue: O cabeçalho principal da aplicação.
  • TheFooter.vue: O rodapé principal da aplicação.
  • TheSidebar.vue: A barra lateral principal da aplicação.
vue
<!-- TheHeader.vue -->
<script setup lang="ts">
import { useRouter } from "vue-router";

import BaseButton from "@/components/BaseButton.vue";

const emit = defineEmits<{
  (e: "toggle-sidebar", event: Event): void;
}>();
const router = useRouter();
const toggleSidebar = (event: Event) => {
  emit("toggle-sidebar", event);
};
const goToHome = () => {
  router.push({ name: "home" });
};
const goToAbout = () => {
  router.push({ name: "about" });
};
</script>

<template>
  <header class="the-header">
    <BaseButton variant="secondary" @click="toggleSidebar">Menu</BaseButton>
    <h1>My Application</h1>
    <nav>
      <BaseButton variant="primary" @click="goToHome">Home</BaseButton>
      <BaseButton variant="primary" @click="goToAbout">About</BaseButton>
    </nav>
  </header>
</template>

<style scoped>
.the-header {
  display: flex;
  justify-content: space-between;
  align-items: center;

  background-color: #333;
  color: white;
  padding: 10px 20px;
}
nav {
  display: flex;
  gap: 10px;
}
</style>

Vantagens da Diferenciação entre "Base" e "The"

  1. Organização e Clareza: Facilita a compreensão imediata do propósito de um componente apenas pelo nome.
  2. Reutilização: Componentes "Base" promovem a reutilização e reduzem a duplicação de código.
  3. Manutenção: Componentes "The" encapsulam partes específicas da aplicação, tornando-as mais fáceis de manter e atualizar.
  4. Consistência: As convenções de nomenclatura promovem consistência em todo o código base, facilitando a colaboração e revisão de código.

Estrutura de Diretórios

Para organizar esses componentes de forma clara, a estrutura de diretórios pode ser definida da seguinte maneira:

plaintext
src/
├── components/
│   ├── BaseButton/
│   │   ├── BaseButton.vue
│   │   └── index.ts
│   ├── BaseModal/
│   │   ├── BaseModal.vue
│   │   └── index.ts
│   ├── BaseInput/
│   │   ├── BaseInput.vue
│   │   └── index.ts
│   ├── index.ts
│   ├── TheHeader/
│   │   ├── TheHeader.vue
│   │   └── index.ts
│   ├── TheFooter/
│   │   ├── TheFooter.vue
│   │   └── index.ts
│   ├── TheSidebar/
│   │   ├── TheSidebar.vue
│   │   └── index.ts
│   └── ...
└── ...

Conclusão

Diferenciar componentes usando os prefixos "Base" e "The" é uma prática recomendada em projetos Vue que promove a organização, reutilização de código e clareza no desenvolvimento. Componentes "Base" são reutilizáveis e genéricos, enquanto componentes "The" são específicos e únicos para a aplicação. Essa convenção de nomenclatura não só melhora a manutenção e escalabilidade do código, mas também facilita a colaboração em equipe.