A Onion Architecture e a Clean Architecture seguem a mesma regra: as dependências apontam para dentro, em direção ao domínio. Elas diferem na forma de organizar o código que obedece a essa regra. A Onion organiza por camada. A Clean organiza por caso de uso.

Essa diferença é pequena o bastante para que a maioria das equipes possa adotar qualquer uma das duas. Ela aparece em um ponto concreto: na Clean Architecture, uma nova funcionalidade é uma nova classe de caso de uso em um projeto Application, e na Onion é um novo método em um serviço existente.

Recorremos à Clean Architecture quando a parte difícil são as regras de negócio, e a Onion vence com folga quando a parte difícil é a divisão em camadas e a equipe quer menos convenções. Em uma aplicação pequena, nenhuma das duas vence: ambas acrescentam projetos, indireção e mapeamento que a base de código talvez nunca cresça o bastante para justificar.

Para baixar o código-fonte deste artigo, você pode acessar nosso repositório no GitHub.

O que é a Onion Architecture?

A arquitetura Onion é um tipo de arquitetura em camadas que pode ser visualizada como uma série de círculos concêntricos, parecidos com as camadas de uma cebola. Jeffrey Palermo apresentou essa arquitetura pela primeira vez para resolver as deficiências da abordagem tradicional de arquitetura em N camadas.

Existem várias formas de dividir a arquitetura Onion, mas algumas camadas são comuns:

  • Camada de domínio
  • Camada de serviço
  • Camada de infraestrutura
  • Camada de apresentação

Conceitualmente, as camadas de infraestrutura e de apresentação são consideradas do mesmo nível na hierarquia.

Vejamos a hierarquia:

Onion Architecture

Vale notar que as camadas mais externas só dependem das camadas internas, e não o contrário. À medida que ‘descascamos as camadas da cebola’, expomos as camadas internas.

A Onion está intimamente relacionada ao padrão Hexagonal (Ports and Adapters), mas não é a mesma coisa. Alistair Cockburn publicou a Hexagonal primeiro, e a Onion se baseia nela em vez de renomeá-la.

A Hexagonal envolve o núcleo da aplicação, o “hexágono”, com “portas” simétricas: as interfaces pelas quais a aplicação se comunica com o mundo exterior. Os “adaptadores” se encaixam nessas portas e conectam a aplicação a sistemas externos ou frameworks. O que a Hexagonal não faz é ordenar o interior desse núcleo em camadas hierarquizadas, e é essa ordenação que a Onion acrescenta. Daqui em diante, vamos nos concentrar na Onion.

Para ver a construção passo a passo, confira uma implementação completa da arquitetura Onion no ASP.NET Core.

Agora, vejamos o padrão Clean Architecture.

O que é a Clean Architecture?

A Clean Architecture é um padrão voltado para a criação de aplicações fáceis de manter, de escalar e de testar. Assim como na arquitetura Onion, conseguimos isso dividindo as coisas em camadas com funções específicas.

Vamos falar das camadas:

As camadas da Clean Architecture

A camada de domínio, idêntica à da arquitetura Onion, representa as regras de negócio e as entidades centrais. Ela não depende de outras camadas.

A camada de aplicação, posicionada logo por fora da camada de domínio, atua como intermediária e contém os casos de uso que expõem as regras de negócio. Ela depende apenas do domínio.

A camada de infraestrutura, novamente idêntica à da arquitetura Onion, implementa serviços externos, como bancos de dados, armazenamento de arquivos e e-mails. Ela contém as implementações das interfaces definidas na camada de domínio.

A camada de apresentação, mais uma vez semelhante à da arquitetura Onion, é responsável por tratar as interações do usuário e exibir os dados na interface do usuário.

The Web API Production Checklist, e-book gratuito em inglês

E-book gratuito

Sua Web API está pronta para produção?

33 itens para verificar antes de implantá-la, com a correção de cada um. Um PDF gratuito de 76 páginas para .NET 10.

O e-book está em inglês.

Baixe o checklist gratuito

PDF gratuito. Um único e-mail para enviá-lo. Cancele a inscrição quando quiser.

Para ver a construção passo a passo, confira uma implementação completa da Clean Architecture no ASP.NET Core.

Um princípio-chave aqui é que as dependências fluem para dentro. Isso permite trocar implementações específicas no futuro sem afetar outras partes da aplicação.

O que é Clean Code Architecture?

Não existe um padrão chamado “clean code architecture”. A expressão mistura duas ideias distintas do mesmo autor: Clean Code, sobre como escrever funções e classes legíveis, e Clean Architecture, sobre como organizar as dependências entre projetos.

O Clean Code trata do interior dos métodos e das classes. A Clean Architecture trata de qual projeto pode referenciar qual. As duas são independentes: uma solução Clean Architecture de manual pode estar cheia de métodos ilegíveis, e uma aplicação de console com um único projeto pode seguir o Clean Code à risca.

Quem pesquisa a expressão combinada quase sempre quer a Clean Architecture: entidades no centro, casos de uso em volta delas, adaptadores e frameworks do lado de fora e todas as dependências apontando para dentro.

Se a dúvida real é sobre nomes, tamanho de funções e comentários, isso é Clean Code, e nenhum dos diagramas de camadas desta página vai ajudar.

Clean Architecture vs Onion Architecture: qual é a diferença?

A Regra da Dependência é idêntica nas duas. Robert C. Martin a formula como “as dependências do código-fonte só podem apontar para dentro”, e o post de Jeffrey Palermo sobre a Onion diz a mesma coisa: “todo acoplamento se dá em direção ao centro”.

A diferença está no que fica em torno do centro e no que dá nome às camadas. A Onion organiza por camada: um núcleo de domínio, depois os serviços, depois a infraestrutura e a apresentação em volta. A Clean organiza por caso de uso: entidades no centro, uma camada de aplicação que dá nome a cada coisa que o sistema faz, depois os adaptadores de interface e, por fim, os frameworks.

Em uma solução, isso aparece imediatamente. O núcleo de uma Clean Architecture tem um projeto Application cheio de handlers de casos de uso. Já o núcleo de uma Onion costuma ter, em vez disso, interfaces e implementações de serviços agrupadas por entidade.

A consequência que vale guardar é onde fica o comportamento novo. Na Clean Architecture, uma nova funcionalidade é uma nova classe de caso de uso. Na Onion, é um novo método em um serviço existente.

As duas se sobrepõem bastante, e não só na nossa leitura: o guia de arquitetura .NET da Microsoft apresenta Hexagonal, Ports-and-Adapters, Onion e Clean como nomes que a mesma arquitetura já recebeu. Na prática, a Clean Architecture é uma variante da Onion com camadas mais explícitas, e ambas se apoiam na inversão de dependência, de modo que as camadas externas dependem de abstrações declaradas mais para dentro.

Primeiro, vamos destacar as dependências de cada projeto nas duas arquiteturas, começando pela Onion Architecture:

CamadaProjetoDepende de
ApresentaçãoAPITudo
InfraestruturaPersistenceDomain
NúcleoServices.AbstractionsContracts, Domain
ServicesContracts, Domain, Services.Abstractions
ContractsDomain
DomainN/A

Agora, vejamos as dependências na Clean Architecture:

CamadaProjetoDepende de
ApresentaçãoAPITudo
InfraestruturaInfrastructureDomain
PersistenceDomain
NúcleoApplicationDomain
DomainN/A

Embora as nossas aplicações tenham um número diferente de projetos, os princípios continuam os mesmos. Os projetos do núcleo só dependem uns dos outros (ou seja, dentro da mesma camada). Os projetos da camada de infraestrutura só dependem da camada de domínio, enquanto os projetos da camada de apresentação dependem de todas as outras camadas.

Então, em termos de dependências, não há diferença entre os padrões. A camada mais externa depende das camadas internas. Esse é o princípio central por trás dos dois padrões, e ambos o põem em prática com o princípio da inversão de dependência em C#.

Nenhum dos padrões se impõe sozinho. O compilador não se importa em deixar um projeto de domínio referenciar um driver de banco de dados; então, se a direção importa para nós, devemos impor essas regras de camadas com testes de arquitetura que fazem o pipeline de CI falhar quando uma referência aponta para o lado errado.

Estrutura de projetos do núcleo na Onion e na Clean Architecture

Na arquitetura Onion, o nosso núcleo é organizado em um conjunto de projetos:

Estrutura do núcleo da Onion Architecture

Temos as entidades de domínio (ou de negócio), as exceções, as interfaces de repositório e as interfaces/implementações de serviço. Além disso, esses componentes são parte integrante da arquitetura. Repare que tudo está organizado em torno de “Pizza” e “Orders”.

Vejamos o núcleo na solução Clean Architecture:

Estrutura do núcleo da Clean Architecture

The Web API Production Checklist, e-book gratuito em inglês

E-book gratuito

Sua Web API está pronta para produção?

33 itens para verificar antes de implantá-la, com a correção de cada um. Um PDF gratuito de 76 páginas para .NET 10.

O e-book está em inglês.

Baixe o checklist gratuito

PDF gratuito. Um único e-mail para enviá-lo. Cancele a inscrição quando quiser.

Então temos entidades outra vez, e interfaces de repositório outra vez. Nenhuma novidade aí. Mas repare no projeto CleanArchitecture.PizzaStore.Application. Ele contém casos de uso específicos, que queremos que a aplicação cumpra.

É aqui que surge uma das principais diferenças entre os padrões. O padrão Clean Architecture procura organizar o código em torno de casos de uso e tem um foco real na lógica de negócio. A ênfase está em definir esses casos de uso de forma explícita.

Com esse projeto Application criado, a próxima pergunta é como fica um caso de uso dentro dele. Uma resposta comum é uma requisição e um handler por operação, o que significa organizar a camada de aplicação com CQRS e MediatR.

Em outras palavras, enquanto a arquitetura Onion se concentra nas camadas e no fluxo das dependências, a Clean Architecture se concentra em organizar a aplicação em torno de casos de uso, sem abrir mão dos mesmos princípios de dependência.

A Clean Architecture prioriza a independência das regras de negócio por meio de camadas concêntricas de entidades, casos de uso e adaptadores, enquanto a arquitetura Onion gira em torno de um modelo de domínio central, com camadas estruturadas ao redor dele para manter uma separação clara de responsabilidades e facilitar um gerenciamento flexível das dependências.

Como decidir qual padrão usar?

Escolha a Clean Architecture quando a parte difícil forem as regras de negócio, e a Onion quando for a divisão em camadas.

A cerimônia extra da Clean Architecture (uma classe por caso de uso) se paga quando o domínio é realmente complexo, quando vários pontos de entrada compartilham o mesmo comportamento ou quando a equipe precisa das regras do jogo escritas em um lugar onde quem acabou de chegar possa lê-las.

A Onion é a mais leve das duas. Ela oferece a mesma direção de dependência com menos classes por funcionalidade e menos convenções, o que combina com uma equipe experiente trabalhando em um modelo bem compreendido, em que a maioria das operações são leituras e gravações comuns.

Para uma aplicação pequena, nenhuma das duas. Ambas acrescentam projetos, indireção e mapeamento a uma base de código que talvez nunca cresça o bastante para precisar deles.

Qualquer que seja a escolha, o que vale defender na revisão de código é a direção das dependências. Os nomes das camadas são negociáveis.

Onion ArchitectureClean Architecture
Introduzida porJeffrey PalermoRobert C. Martin
Ideia organizadoraCamadas concêntricas em torno de um núcleo de domínioCasos de uso em torno das entidades
Projetos típicos do núcleoDomain, Services (interfaces e implementações)Domain/Entities, Application (casos de uso)
Onde fica uma nova funcionalidadeUm novo método em um serviço existenteUma nova classe de caso de uso
Direção das dependênciasPara dentroPara dentro
Obtida comInversão de dependênciaInversão de dependência
Quão prescritiva éMais flexível: os nomes das camadas variam de equipe para equipeMais rígida: camadas nomeadas, com papéis definidos
Número de projetosSeis no nosso exemplo, sem contar os testesCinco no nosso exemplo, sem contar os testes
Relacionada de perto aHexagonal / Ports and AdaptersScreaming Architecture, Clean Code (outra ideia)
Escolha quandoA prioridade é ter estrutura e separação clarasAs regras de negócio são complexas ou vários pontos de entrada compartilham comportamento
Evite as duas quandoA aplicação é pequena o bastante para que pastas resolvamIdem

As atribuições da linha “Introduzida por” foram conferidas em 13 de setembro de 2026 em The Onion Architecture: Part 1, de Jeffrey Palermo, e The Clean Architecture, de Robert C. Martin.

Quando uma única aplicação cresce e passa a ter várias áreas de negócio em grande parte independentes, a próxima decisão não é Onion contra Clean, mas se vale a pena dividi-la, e o monólito modular é a resposta inicial mais comum.

Estrutura e flexibilidade

Como em qualquer padrão de arquitetura, muitas vezes estamos abrindo mão de simplicidade. Por isso, só vale usar um desses padrões se acreditarmos que a aplicação vai crescer junto com as necessidades e os recursos do negócio. Entre os dois padrões, porém, se a prioridade for uma lógica de negócio complexa, a Clean Architecture é a melhor escolha. Se a prioridade for uma estrutura e camadas claras, a Onion pode ser uma escolha melhor.

Experiência

Como a Clean Architecture segue suas diretrizes à risca, ela pode ser adequada a equipes acostumadas com esse tipo de regra. Essa estrutura ajuda novos desenvolvedores a se integrar com facilidade e reduz as chances de quebrar os padrões estabelecidos. No entanto, essa adesão às regras custa flexibilidade. Para equipes experientes, que entendem o foco nas camadas e conseguem mantê-lo, mas preferem mais flexibilidade, a arquitetura Onion pode ser uma escolha melhor.

Manutenção

A Clean Architecture facilita manter separadas as diferentes áreas de negócio e estendê-las, expondo explicitamente as funcionalidades por meio de casos de uso, de forma muito parecida com a Vertical Slice Architecture. Por outro lado, a arquitetura Onion oferece uma separação de responsabilidades mais clara, o que facilita estender a aplicação como um todo.

Conclusão

Neste artigo, examinamos mais de perto os padrões Onion e Clean Architecture. Mais especificamente, analisamos a abordagem de cada um para o design de software. Embora sejam muito parecidos, destacamos algumas nuances que podem nos ajudar a decidir qual escolher ao criar a nossa próxima aplicação. Como em qualquer decisão de arquitetura, é importante entender todas as contrapartidas, assim como o motivo para aplicar o padrão. Esperamos que este artigo ajude a tomar essa decisão no futuro.

Bons códigos!

Testado com .NET 10.0.10.