Depois de mais de 35 anos desenvolvendo sistemas, posso afirmar com segurança: a maioria dos projetos que fracassa não falha por falta de tecnologia — falha por falta de arquitetura. E é exatamente aí que a Clean Architecture faz toda a diferença.
Neste artigo vou te mostrar como aplicamos Clean Architecture em projetos .NET reais aqui na MIT Desenvolvimento de Sistemas — sem academicismo, só o que funciona.
O que é Clean Architecture?
Criada por Robert C. Martin (o famoso Uncle Bob), a Clean Architecture é um modelo de organização de código que separa as responsabilidades em camadas bem definidas, garantindo que:
- O negócio não depende de frameworks
- O banco de dados é um detalhe de implementação
- A aplicação é testável de forma independente
- As mudanças em uma camada não quebram as outras
As 4 camadas na prática
1. Domain (Domínio) É o coração da aplicação. Aqui ficam as entidades de negócio, regras e interfaces — sem nenhuma dependência externa.
csharp
public class Aluno
{
public Guid Id { get; private set; }
public string Nome { get; private set; }
public string Email { get; private set; }
public bool Ativo { get; private set; }
public Aluno(string nome, string email)
{
Id = Guid.NewGuid();
Nome = nome ?? throw new ArgumentNullException(nameof(nome));
Email = email ?? throw new ArgumentNullException(nameof(email));
Ativo = true;
}
public void Desativar() => Ativo = false;
}
2. Application (Aplicação) Orquestra os casos de uso. Usa as interfaces do Domain sem saber como são implementadas.
csharp
public class CadastrarAlunoUseCase
{
private readonly IAlunoRepository _repository;
public CadastrarAlunoUseCase(IAlunoRepository repository)
{
_repository = repository;
}
public async Task ExecuteAsync(string nome, string email)
{
var aluno = new Aluno(nome, email);
await _repository.AddAsync(aluno);
}
}
3. Infrastructure (Infraestrutura) Implementa os detalhes: banco de dados, APIs externas, serviços de e-mail. Aqui entra o Entity Framework, SQL Server, MongoDB, etc.
csharp
public class AlunoRepository : IAlunoRepository
{
private readonly AppDbContext _context;
public AlunoRepository(AppDbContext context)
{
_context = context;
}
public async Task AddAsync(Aluno aluno)
{
await _context.Alunos.AddAsync(aluno);
await _context.SaveChangesAsync();
}
}
4. Presentation (Apresentação) A camada que o usuário vê — API, MVC, Blazor. Recebe as requisições e delega para a Application.
csharp
[ApiController]
[Route("api/[controller]")]
public class AlunosController : ControllerBase
{
private readonly CadastrarAlunoUseCase _useCase;
public AlunosController(CadastrarAlunoUseCase useCase)
{
_useCase = useCase;
}
[HttpPost]
public async Task<IActionResult> Cadastrar([FromBody] CadastrarAlunoRequest request)
{
await _useCase.ExecuteAsync(request.Nome, request.Email);
return Ok();
}
}
A regra de ouro: a dependência sempre aponta para dentro
Domain ← Application ← Infrastructure Domain ← Application ← Presentation
O Domain nunca conhece a Infrastructure. A Infrastructure conhece o Domain. Simples assim — e poderoso.
Quando usar Clean Architecture?
Use quando:
- O projeto vai crescer e ter manutenção por anos
- Você tem um time de desenvolvedores
- As regras de negócio são complexas
- Precisa de alta testabilidade
Evite quando:
- É um projeto pequeno e pontual
- O prazo é curtíssimo e a equipe não conhece o padrão
- É um CRUD simples sem regras de negócio
Erros mais comuns que vejo nos times
1. Colocar lógica de negócio na Controller A Controller deve só receber, delegar e responder. Nunca processar regras.
2. Deixar o Domain depender do Entity Framework Vi times colocando [Required] do EF direto nas entidades de domínio. Isso quebra a independência.
3. Criar Use Cases genéricos demais Cada Use Case deve fazer uma coisa só. GerenciarAlunoUseCase que faz tudo é um antipadrão.
Conclusão
Clean Architecture não é burocracia — é investimento. Os primeiros dias parecem mais lentos, mas em 3 meses você percebe que o time entrega mais rápido, com menos bugs e com muito mais confiança para mudar o código.
Na MIT Desenvolvimento de Sistemas, aplicamos esse padrão nos nossos sistemas BigSchool e MITransport — e os resultados em manutenibilidade e velocidade de entrega são concretos.
Quer modernizar a arquitetura da sua empresa? Fale com nossa equipe e agende uma consultoria.
Gostou? Compartilhe com seu time e acompanhe a Academia de Tecnologia para mais conteúdo técnico aplicado.
