Padrões de Estrutura de Projeto
Layouts comuns: src/lib.rs + main.rs de crate único, crates/* de workspace, módulos de domínio models/, handlers/, testes de integração tests/.
Receita
myapp/
Cargo.toml
src/
lib.rs # lógica de domínio
main.rs # CLI fina
bin/admin.rs # segundo binário
tests/
integration.rs
Quando usar isso: Escalando a base de código sem dependências circulares.
Exemplo de Trabalho
api-server/
crates/
domain/
infra/
api/
Cargo.toml # workspace
domainlógica pura, sem axumapiconecta HTTP ao domínioinfradb, configuração
O que isso demonstra:
- Direção da dependência: api -> domain, infra -> domain
- Membros do workspace por crate
- Testes de integração em
api/tests
Análise Profunda
src/{module}.rs vs src/{module}/mod.rs. examples/ para demonstrações de uso. benches/ para Criterion.
Armadilhas
- Uso circular de módulos - Erro de compilação. Correção: Dividir módulo ou extrair compartilhado.
lib.rsMonstro - Milhares de linhas. Correção: Submódulos.- Testes apenas em unidade - Perde a API pública. Correção: Integração
tests/. - Duplicação de lógica binária - Múltiplos
maincopiam código. Correção: Biblioteca compartilhada. - Aninhamento profundo - Caminhos longos. Correção:
pub usede prelúdio.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Módulos planos | Crate pequeno | Muitos domínios |
| Workspace cedo | Limites claros | Hello world |
| Binário único | Ferramenta | Reutilização de biblioteca |
FAQs
mod.rs vs name.rs?
Ambos funcionam - prefira module_name/mod.rs para muitos arquivos.tests/common?
Helper `tests/common/mod.rs`.localização de build.rs?
Raiz do pacote.módulo config?
config.rs ou settings/.módulo error?
Reexportação de error.rs.prelude.rs?
Padrão de módulo prelude.estrutura do axum?
routes/ handlers/ state/.estrutura da cli?
commands/ args em clap 4.migrar para workspace?
Extrair crate lib primeiro.documento de arquitetura?
ADR para escolhas de layout.Relacionado
Versões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.