Clean Architecture com ASP.NET Core – Parte #1

Aprenda a como implementar o Clean Architecture (ou Arquitetura Limpa) com ASP.NET Core nessa série de artigos.

Nessa série de artigos vou implementar uma aplicação do zero, usando os princípios do Clean Architecture. O domínio de exemplo será de um sistema de gerenciamento de academia, chamado AwesomeGym.

Código-fonte aqui.


Quer ser notificado sobre os próximos artigos, lives semanais, eventos e treinamentos? Entre no canal LuisDev no Telegram!


Introdução a Clean Architecture

Também conhecida como Onion Architecture, a Clean Architecture é uma arquitetura amplamente utilizada no mercado de trabalho atualmente. Seja em sua definição formal, ou com variações, é uma arquitetura que resulta em um projeto com boa separação de responsabilidades, testabilidade, e manutenibilidade.

Ela emprega o Princípio da Inversão de Dependência (DIP, do SOLID), e também princípios do Domain Driven Design.

Essa arquitetura tem como núcleo central a lógica de negócio do domínio, dela, que concentra tanto a definição do Domínio, quanto outros elementos como interfaces de Infraestrutura. Esse núcleo é chamado de Core, na Clean Architecture. Em toda sua extensão são usadas abstrações, realizando a inversão de dependência.

Os componentes dela são:

  • User Interface: em nosso caso, contém uma API, que é a porta de entrada para nosso sistema ASP.NET Core.
  • Application: contém responsabilidades relativas a aplicação, como modelos de entrada e saída, e serviços da aplicação.
  • Infrastructure: contém implementação de responsabilidades relativas a infraestrutura, como acesso a serviços de nuvem e bancos de dados, por exemplo.
  • Core: contém interfaces de serviços de domínio e de infraestrutura, bem como modelos de domínio, como entidades, enums, exceções de domínio, por exemplo.

Criando a estrutura básica da solução

Começamos pela criação dos projetos que fazem parte da solução. Será utilizado o Visual Studio 2019 para essa série, mas pode ser feito usando o Visual Studio Code.

Na imagem abaixo são mostradas as camadas a serem criadas, com exceção da existência, no nosso exemplo, de uma camada de aplicação entre a User Interface e a Application Core.

Arquitetura Limpa; exibição de camada horizontal
Referência da imagem https://docs.microsoft.com/pt-br/dotnet/architecture/modern-web-apps-azure/common-web-application-architectures

Reforço novamente: é essencial termos um pensamento crítico em relação aos produtos e padrões que utilizamos. Embora na documentação da imagem que eu mostro dizer que não tem uma camada Application, eu testei diferentes estruturas e essa foi a que mais gostei. Se preferir utilizar a estrutura “oficial”, fique a vontade!

Além disso, a camada Core não pode referenciar outras camadas acima dela, então isso não permitiria você definir os ViewModels e InputModels na camada API, e usar no Core. Nesse caso, a Application seria responsável pela lógica da aplicação, definindo os modelos de entrada e saída, e coordenando chamadas a interfaces de Infraestrutura, e à camada Core.

Como primeiro passo, criamos a solução em branco, usando o modelo mostrado na imagem abaixo. Ela se chamará CleanArchitectureArticle.

Passo 1 para criação da Solução em branco

Avançamos, e em seguida preenchemos o nome e finalizamos. Lembrando que o nosso “domínio” é de um sistema de gerenciamento de academia, e que se chamará AwesomeGym.

Passo 2 para criação de Solução em branco

Com nossa solução criada, começaremos a adicionar nossos projetos de biblioteca de classes, correspondendo às outras camadas.

Solução criada

Adicionando o projeto API

A camada User Interface, será representada por uma aplicação ASP.NET Core, na versão 3.1 e usando o modelo API. Na imagem abaixo, mostro o passo-a-passo.

Primeiro, usamos o botão direito em cima da solução, no menu “Gerenciamento de Soluções”, “Adicionar > “Novo Projeto…”. Buscamos pelo modelo ASP.NET Core, usando o Visual Studio 2019

Passo 1 para criação de projeto ASP.NET Core

Avançamos, e em seguida preenchemos o nome e vamos para a próxima etapa. Esse projeto se chamará AwesomeGym.API.

Passo 2 para criação de projeto ASP.NET Core

Finalmente, selecionamos a versão e o modelo, e finalizamos. Para essa série, utilizo a versão 3.1, e o modelo API.

Último passo para a criação do projeto ASP.NET Core

Adicionando os projetos de biblioteca de classes

Para as outras camadas serão criados projetos de bibliotecas de classe, utilizando o .NET Core. Vou mostrar a criação do primeiro apenas, já que basta replicar para os nomes seguintes.

Primeiro, buscamos pelo modelo “Biblioteca .NET Core”, usando o Visual Studio 2019.

Passo 1 para criação de um projeto Biblioteca de Classes .NET Core

Avançamos, e em seguida preenchemos o nome e finalizamos.

Passo 2 para cria;áo de um projeto Bibliotea de Classes .NET Core

Repetimos esse processo para criar as outras camadas. Os nomes serão:

  • AwesomeGym.Infrastructure
  • AwesymeGym.Core

A visão da Solucao resulta na imagem abaixo.

Solução resultante deste primeiro artigo

Já pensou nos resultados incríveis que você pode ter com o meu acompanhamento em sua carreira, com foco em te ajudar a definir, acompanhar e conquistar seus objetivos? Sejam eles a respeito de especialização técnica, promoções de cargo, reconhecimento, conquistas financeiras, reconhecimento de comunidade e/ou carreira internacional.

Tenho um Programa de Mentoria em Grupo focado em desenvolvedores .NET, e estou recebendo aplicações. Se tiver interesse real em contar com minha ajuda nisso, clique aqui e preencha o formulário.


Conclusão

Nesse artigo apresentei o Clean Architecture, e seus conceitos relacionados. Apresentei um passo a passo para a configuração inicial de uma Solução no Visual Studio aplicando ele.

Nos próximos artigos, será dada a continuação a esse projeto, adicionando classes e funcionalidades, seguindo essa arquitetura.

Até mais!