Este guia orienta como iniciar um novo projeto seguindo boas práticas de DDD (Domain-Driven Design) e Clean Architecture, garantindo alinhamento entre negócio e tecnologia desde o início.
1. Alinhamento inicial
Antes de escrever qualquer linha de código, é fundamental alinhar expectativas:
- Tecnologia (Arquiteto + Engenheiros):
- Discussão sobre infraestrutura (Google Cloud, AWS etc.).
- Escolha das tecnologias principais (Node.js, PHP, TypeScript, frameworks, bancos de dados).
- Definições de Arquitetura em nuvem
- Desenhar arquitetura da infraestrutura que ira ser ultilizada, definindo serviços e escalabilidade.
Credenciais e contas de serviço devem ser criadas e documentadas
2. Início do DDD
Após alinhamento técnico, inicia-se o processo de design de domínio:
- Levantamento do domínio:
- Identificar entidades centrais (ex.: Usuário, Pedido, Produto).
- Mapear objetos de valor e regras de negócio.
- Definir casos de uso iniciais (ex.: criar usuário, processar pedido).
- Modelagem inicial:
- Criar glossário do domínio para evitar ambiguidades.
- Estabelecer contextos delimitados (Bounded Contexts) se aplicável.
- Esboçar o fluxo de dados entre camadas (entrada → aplicação → domínio → infraestrutura).
3. Estruturação do projeto
Com base nas definições, criar a estrutura inicial seguindo Clean Architecture:
src/
├── domain/ # Entidades, objetos de valor, interfaces (ports)
├── application/ # Casos de uso, DTOs
├── infrastructure/ # Implementações concretas (bancos, APIs externas)
├── interfaces/ # Controllers, rotas, presenters
├── shared/ # Erros, utils, configs
└── tests/ # Unitários e integração
Para projetos maiores, organizar em módulos por domínio (user/, order/, etc.), cada um com suas próprias camadas.
4. Desenvolvimento
Após a estrutura inicial:
- Criação do repositório no git
- Configurar infraestrutura em nuvem
- Criar esteira de deploy (CI/CD)
- Criar ambiente de desenvolvimento local
- Começar o desenvolvimento
⁉️ O que documentar aqui?
- Passos para rodar localmente.
- Configurações de Credenciais
- Sempre que ouver novas features e modificações, adicionar na documentação
