Responsabilidade Única e Tamanho de Classes
Estabelecemos limites práticos para responsabilidade e tamanho de classes visando legibilidade, testabilidade e manutenção, especialmente relevantes na migração de legados para uma arquitetura DDD.
Regra
- Classes devem ter uma única responsabilidade.
- Exceção: repositórios e services curtos usados no mesmo contexto (mesma tela/endpoint).
- Tamanho recomendado: classes com ~200 linhas no máximo.
Justificativa
- Facilita testes unitários focados.
- Melhora a legibilidade e manutenção.
- Reduz acoplamento indevido e preserva a integridade das etapas do processo.
Exemplo
// Ruim: um service que faz de tudo
public sealed class GodService
{
public Task ValidateAsync() => Task.CompletedTask;
public Task CalculateAsync() => Task.CompletedTask;
public Task PersistAsync() => Task.CompletedTask;
}
// Bom: responsabilidades separadas
public interface IOrderValidator { Task ValidateAsync(Order order); }
public interface IOrderPricer { Task<decimal> CalculateTotalAsync(Order order); }
public interface IOrderPersister { Task SaveAsync(Order order, CancellationToken ct); }