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

Referências