Aula 14 - Arquitetura e Boas Práticas 🏗️
Objetivo
Objetivo: Entender os princípios da Clean Architecture, como aplicar Injeção de Dependência em Go e como organizar projetos de forma que sejam escaláveis e fáceis de manter.
1. Clean Architecture (Arquitetura Limpa) 🧊
A Clean Architecture foca na independência de frameworks, UI e banco de dados. O coração da aplicação é a Lógica de Negócio (Entidades e Casos de Uso).
As Camadas:
- Entities/Models: Regras de negócio globais.
- Usecases/Services: Lógica específica da aplicação.
- Interfaces/Adapters: Conecta o mundo externo (Handlers, Repositories).
- Infrastructure: Frameworks, Banco de Dados, Loggers.
2. Injeção de Dependência (DI) 💉
Em Go, aplicamos DI de forma manual e simples, geralmente via construtores que aceitam interfaces.
type Service struct {
repo RepositoryInterface
}
func NewService(r RepositoryInterface) *Service {
return &Service{repo: r}
}
Isso permite que você troque o banco de dados real por um mock nos testes com facilidade.
3. Organização de Diretórios (Padrão Go) 📂
Um projeto profissional em Go costuma seguir esta estrutura:
$ tree
.
├── cmd/ # Ponto de entrada (main.go)
├── internal/ # Código privado (Business Logic)
│ ├── entity/
│ ├── service/
│ └── repository/
├── pkg/ # Código que pode ser importado por outros
└── api/ # Definições de API (Swagger/Proto)
4. O Fluxo de Controle (Mermaid) 📊
graph TD
UI[Handlers/Controllers] --> UC[UseCases/Services]
UC --> DB[Repositories/Interfaces]
DB --> SQL[(Database SQL)]
subgraph "Camadas Externas"
UI
SQL
end
subgraph "Core da Aplicação"
UC
DB
end
5. Boas Práticas (Cringe Free!) ✨
- Nomeie pacotes com substantivos simples:
user,auth,order(eviteutils,helpers). - Retorne structs, aceite interfaces: Isso dá flexibilidade para quem consome seu código.
- Mantenha o
main.gomagro: Ele só deve "fiar" as dependências e iniciar o servidor.
6. Mini-Projeto: Refatorando para DI 🚀
Pegue sua API da Aula 12 e: 1. Crie uma interface para o seu Repository. 2. Altere o seu Service/Handler para receber essa interface no construtor. 3. Verifique se o seu código continua funcionando após a refatoração.
7. Exercícios de Fixação 🧠
- Qual a principal vantagem da Clean Architecture?
- Por que usamos a pasta
internalem Go? - Como a Injeção de Dependência ajuda no desacoplamento do código?
Próxima Aula: Vamos colocar tudo no container com Docker e preparar o Deploy! 🐳🐹