Aula 15 – Clean Code e Arquitetura 📐
Objetivo
Nesta aula, consolidaremos os conhecimentos técnicos com os princípios de código limpo e arquitetura. Aprenderemos a aplicar o SOLID, organizar o projeto em camadas e entenderemos os fundamentos do Domain-Driven Design (DDD).
1. Princípios SOLID com TypeScript 💎
O SOLID é um conjunto de cinco princípios que tornam o software mais compreensível, flexível e sustentável.
| Letra | Princípio | Descrição no TS |
|---|---|---|
| S | Single Responsibility | Uma classe/função deve ter apenas uma razão para mudar. |
| O | Open/Closed | Aberto para extensão, fechado para modificação. |
| L | Liskov Substitution | Subclasses devem ser substituíveis por suas classes base. |
| I | Interface Segregation | Muitas interfaces específicas são melhores que uma geral. |
| D | Dependency Inversion | Dependa de abstrações (interfaces), não de implementações. |
2. Separação de Responsabilidades e Camadas 🏢
Uma aplicação profissional é dividida em camadas para facilitar a manutenção e os testes.
- Domain: Onde vivem as regras de negócio e interfaces principais.
- Application: Casos de uso e lógica de orquestração (Services).
- Infrastructure: Detalhes técnicos (Base de dados, chamadas de API, Frameworks).
3. Domain-Driven Design (Introdução) 🗺️
O DDD foca em entender o problema do cliente e modelar o software fielmente a esse problema. - Entities: Objetos com identidade única (ex: Usuário com ID). - Value Objects: Objetos definidos por seus atributos (ex: Endereço). - Repositories: Porta de saída para persistência.
4. Boas Práticas Profissionais 🚀
- Nomes Significativos: Use nomes que revelem a intenção (
isValidem vez dev). - Funções Pequenas: Cada função deve fazer apenas uma coisa.
- Evite Comentários Óbvios: O código deve ser autoexplicativo através de tipos e bons nomes.
5. Visualizando a Arquitetura em Camadas (Mermaid)
graph TD;
External[Mundo Externo / UI / API] --> Infra[Infraestrutura];
Infra --> App[Aplicação / Services];
App --> Domain[Domínio / Entidades];
style Domain fill:#f9f,stroke:#333
6. Exercícios Práticos 📝
- Básico: Identifique uma violação do princípio de Responsabilidade Única em um código e proponha uma refatoração.
- Básico: Renomeie variáveis e funções de um código legado para nomes mais semânticos e tipados.
- Intermediário: Crie uma interface "Geral" e quebre-a em três interfaces menores (Segregação de Interface).
- Intermediário: Implemente um "Value Object" para representar um CPF, incluindo a validação no construtor.
- Desafio: Esboce a estrutura de pastas de um projeto seguindo a separação entre Domain, Application e Infrastructure.
🚀 Mini-Projeto da Aula
Refatore o seu projeto acumulado até aqui (Sistema de Pagamentos ou Biblioteca) aplicando os princípios de Clean Code e SOLID. - Garanta que nenhuma função tenha mais de 20 linhas. - Verifique se a camada de domínio é independente de bibliotecas externas (como o Express). - Utilize Injeção de Dependência para todos os serviços e repositórios.
Próxima Aula: É hora do Projeto Final e Deploy! Vamos colocar tudo em prática e lançar nossa aplicação!