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.
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.

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.

Inscreva-se na lista de espera do Método .NET Direto ao Ponto, um treinamento completo sobre C#, APIs com ASP.NET Core, Microsserviços e mais: Inscreva-se aqui.
São mais de 450 vídeo-aulas sobre temas como C#, ASP NET Core, EF Core, CQRS, Clean Architecture, Autenticação e autorização com JWT, Testes Unitários, HTML, CSS, JavaScript, Desenvolvimento Front-End com Angular além de mini-cursos em Microsserviços, Performance em .NET, ASP NET Core e Azure, Docker, Carreira Internacional em .NET, e mais. Cursos com certificado em plataforma moderna, e novas aulas são adicionadas semanalmente!
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!
Desenvolvedor .NET Sênior, Microsoft MVP, MBA em Arquitetura de Soluções, Certificado MCSA em ASP.NET Core (70-486) e C# (70-483) pela Microsoft, Instrutor, Produtor de Conteúdo.