Aula 13: Arquitetura e Organização Profissional 🏗️
Nesta aula, vamos aprender como estruturar projetos Angular de grande escala seguindo os padrões utilizados pelas maiores empresas de tecnologia.
📁 Padrão LIFT
O Angular recomenda o padrão LIFT: * Locate: Localizar o código rapidamente. * Identify: Identificar o que o arquivo faz pelo nome. * Flat: Manter uma estrutura o mais plana possível (sem pastas infinitas). * Try to be DRY: Evite repetições desnecessárias.
🏛️ Estrutura de Pastas Recomendada
Um projeto profissional geralmente divide as responsabilidades em três pilares:
- Core: Serviços globais, interceptores e guards (singleton).
- Shared: Componentes visuais genéricos (botões, inputs), pipes e diretivas reutilizáveis.
- Features: As funcionalidades do negócio (ex:
login,vendas,perfil).
graph TD
App[src/app] --> Core[core/]
App --> Shared[shared/]
App --> Features[features/]
Features --> Login[login/]
Features --> Products[products/]
🏷️ Convenções de Nomeclatura
O Angular CLI segue o padrão de kebab-case com sufixos descritivos:
* usuario-header.component.ts
* auth.service.ts
* valida-email.directive.ts
Dica de Ouro
Mantenha cada arquivo com uma única responsabilidade (Single Responsibility Principle). Se um componente tem 1000 linhas, ele deve ser quebrado!
📦 Barrel Files (index.ts)
Para evitar dezenas de linhas de import no topo dos arquivos, usamos arquivos index.ts que exportam tudo de uma pasta.
🧱 Smart vs Dumb (Revisited)
Em arquiteturas profissionais:
* Smart Components ficam na pasta features/.
* Dumb Components ficam na pasta shared/ ou dentro da pasta de uma feature específica se não forem genéricos.
🚀 Prática: Refatoração de Arquitetura
Vamos reorganizar nosso projeto bagunçado!
1. Crie as pastas core, shared e features.
2. Mova os serviços de autenticação para core.
3. Crie um componente de botão estilizado dentro de shared.
4. Organize as páginas existentes dentro de features.
🏁 Mini-Projeto da Aula
Desenhe um diagrama de pastas para um sistema de E-commerce que contenha: Autenticação, Catálogo, Carrinho e Perfil do Usuário. Aplique os conceitos de Core, Shared e Features.