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

Quer alavancar sua carreira como Desenvolvedor(a) .NET?

Opa, aqui é o Luis Felipe (LuisDev), criador do blog LuisDev.

Além de Desenvolvedor .NET Sênior, eu sou instrutor de mais de 700 alunos e também tenho dezenas de mentorados.

Conheça o com mais de 800 video-aulas sobre C# e desenvolvimento de APIs com ASP NET Core, Microsserviços com ASP NET Core, Arquitetura de Software, Computação em Nuvem, SQL, HTML, CSS e JavaScript, JavaScript Intermediário, TypeScript, Desenvolvimento Front-End com Angular, e Desenvolvimento Front-end com React. Diversos mini-cursos disponíveis aos alunos e atualizações gratuitas.

Suporte dedicado, e comunidade de centenas de alunos.

Completo e online, destinado a profissionais que querem dar seu próximo passo em sua carreira como desenvolvedores .NET.

Clique aqui para ter mais informações e garantir sua vaga


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!