Clean Architecture com ASP.NET Core – Parte #3

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

https://www.luisdev.com.br/2020/09/29/clean-architecture-com-asp-net-core-parte-1/
https://www.luisdev.com.br/2020/10/05/clean-architecture-com-asp-net-core-parte-2/
http://www.luisdev.com.br/2021/03/07/clean-architecture-com-asp-net-core-parte-4/
https://www.luisdev.com.br/2021/03/15/clean-architecture-com-asp-net-core-parte-5/

Na parte #3 irei falar sobre a camada Infrastructure, explicando seus objetivos e descrevendo seus componentes.

Código-fonte aqui.


A camada Infrastructure

A camada Infrastructure é constituída pelos seguintes componentes:

  • Serviços de infraestrutura i.e. logging, serviços de computação em nuvem;
  • Persistência;
  • Integração com outros sistemas.

Eles podem ser separados em projetos próprios, dependendo do tamanho da aplicação.

Vou detalhar mais sobre elas, construindo o sistema proposto na parte #1, que é de um gerenciador de academia.

Serviços de infraestrutura

São as classes que tem responsabilidades relacionadas a integração com recursos de infraestrutura externos.

Por exemplo, em um sistema de academia, alguns serviços possíveis seriam:

  • Integração com ERP utilizado, implentando a interface IErpIntegrationService;
  • Acesso a serviços de nuvem, podendo as classes serem granulares por serviço, como acesso a arquivos/blobs ou mensageria. No exemplo a seguir, o Azure File Storage é utilizado para o armazenamento de blogs, sendo feita implementação da interface IFileStorageService.

Nosso projeto, com esses serviços, ficaria que nem a imagem abaixo. Junto a eles, por serem implementações, são necessárias as interfaces correspondentes. Estas foram adicionadas no artigo anterior.

O atributo alt desta imagem está vazio. O nome do arquivo é image-1.png
Interfaces e implementações de serviços de Infraestrutura

Persistência

Nessa categoria de componentes, a responsabilidade principal é gerenciar a persistencia de dados em uma tecnologia de armazenamento. Seja ele em memória, banco de dados (em nuvem ou não, relacional ou não-relacional), ou em arquivos.

Quanto a ASP.NET Core, geralmente uma ORM é utilizada. ORM significa Object-Relational Mapping, ou mapeamento de objetos relacional. O objeto dessa ferramenta ou tipo de biblioteca é servir como uma ponte ou adaptador do formato de dados no projeto, para o formato utilizado como banco de dados. Um exemplo clássico de ORM para .NET Core é o Entity Framework Core (ou simplesmente EF Core), que permite mapear, entre muitas outras fontes, tabelas de bancos de dados SQL Server para classes, e vice-versa.

No caso do EF Core, também é necessária uma classe de contexto de dados, que vai conter a configuração e mapeamentos necessários para o modelo de dados utilizado.

Nosso projeto, com esse serviço, ficaria que nem a imagem abaixo.

O atributo alt desta imagem está vazio. O nome do arquivo é image-2.png
Classes de persistencia, incluindo contexto de dados do EF Core e implementação de repositório

Inscreva-se na lista de espera do Método .NET Direto ao Ponto, um treinamento completo sobre C#, APIs com ASP.NET Core e Microsserviços:  Inscreva-se aqui.

São mais de 250 vídeo-aulas sobre temas como C#, ASP NET Core 5, EF Core, CQRS, Clean Architecture, Autenticação e autorização com JWT, Testes Unitários, Microsserviços, Performance em .NET, ASP NET Core e Azure, Docker, Carreira Internacional em .NET, e mais, em uma plataforma moderna e com emissão de certificados!


Conclusão

Como sempre, eu evito ao máximo impor padrões e estruturas. Acho que o Clean Architecture oferece muito valor em sua essência, e que é possível personalizá-lo de acordo com o seu projeto. Isso, claro, que ele não perca suas vantagens.

Recomendo dar uma sacada no código-fonte, para se certificar de que compreendeu as propriedades e estrutura que usei lá.

E você, como implementa ele em seus projetos? Compartilhe esse artigo com sua equipe, para gerar uma discussão (saudável, de preferencia!) entre si.

Até a próxima!