Comece pelos limites do domínio
Uma arquitetura útil torna as decisões importantes explícitas. Antes de escolher bibliotecas, identifique quais partes do produto mudam juntas, quais dados precisam permanecer consistentes e onde existem integrações externas.
O melhor desenho não é o mais sofisticado; é aquele que a equipe consegue explicar, observar e evoluir.
Um contrato simples
Camadas pequenas e contratos claros reduzem o acoplamento. O exemplo abaixo mantém a regra de negócio independente do transporte HTTP:
export interface ArticleRepository {
findPublished(): Promise<Article[]>;
save(article: Article): Promise<void>;
}
export async function publishArticle(
article: Article,
repository: ArticleRepository,
) {
article.publish();
await repository.save(article);
}
Observe antes de otimizar
Métricas de latência, taxa de erro e uso de recursos mostram onde o sistema realmente precisa de atenção. Otimização sem medida costuma apenas deslocar complexidade.
Conheça meu trabalho no GitHub