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.

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

Código-fonte aqui.


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


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

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

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!