Article image
Alvaro Costa
Alvaro Costa05/11/2022 11:54
Compartilhe

Como estruturo pastas utilizando o Clean Architecture

  • #.NET
  • #.NET C#

Clean Architecture é uma abordagem popular para estruturar seu aplicativo. É uma arquitetura que se divide em quatro camadas proposta por Uncle Bob no seu livro Clean Architecture. Refere-se à organização do projeto de forma que seja fácil de entender e fácil de mudar conforme o projeto cresce.

  •   Domain
  •   Application
  •   Infrastructure
  •   Presentation

Cada uma das camadas é normalmente um projeto do tipo .csproj em sua solution.

Vamos iniciar com uma figura que representa a Clean Architecture:

image

Presentation:

ProjectReference Include="..\Application\Application.csproj" ProjectReference Include="..\Infrastructure\Infrastructure.csproj"

Application:

   
 <ProjectReference Include="..\Domain\Domain.csproj" /> 

Domain:

Domain não depende de nenhuma camada! é isolada.

Infrastructure:

  
<ProjectReference Include="..\Application\Application.csproj" />

Domain Layer

A camada Domínio fica no centro da Arquitetura Limpa. É o coração de seu aplicativo e responsável por seus modelos principais. Aqui definimos coisas como: entities, value objects, aggregates, domain events, exceptions, repository interfaces, etc.

Aqui está a estrutura de pastas que eu utilizo:

📁 Domain

|__ 📁 Events

|__ 📁 Entities

|__ 📁 Exceptions

|__ 📁 Repositories

|__ 📁 Shared

|__ 📁 ValueObjects 

Application Layer

A camada Application fica logo acima da camada Domain. Ele atua como um orquestrador para a camada de Domain, contendo os casos de uso mais importantes em sua aplicação.

Você pode estruturar seus casos de uso usando services ou commands e queries. Seguindo o padrão CQRS, então faço uso dessa abordagem.

📁 Application

|__ 📁 Abstractions

    |__ 📁 Data

    |__ 📁 Email

    |__ 📁 Messaging

|__ 📁 Behaviors

|__ 📁 Contracts

|__ 📁 Features

    |__ 📁 Commands

    |__ 📁 Events

    |__ 📁 Queries

Na pasta Abstractions, defino as interfaces necessárias para a camada Application. As implementações para essas interfaces estão em uma das camadas superiores. Para cada entidade na camada Domínio, crio uma pasta com os comandos, consultas e definições de eventos.

Infrastructure Layer

A camada de infraestrutura contém implementações para serviços externos. O que se enquadraria nesta categoria?

  • Databases - SqlServer, PostgreSQL, MongoDB
  • Identity providers - Auth0, Keycloak
  • Emails providers 
  • Storage services - AWS, Azure Blob Storage
  • Message queues - Rabbit

📁 Infrastructure

|__ 📁 Services

    |__ 📁 Email

    |__ 📁 Messaging

|__ 📁 Persistence

   |__ 📁 EntityConfigurations

    |__ 📁 Migrations

    |__ 📁 Repositories

    |__ #️⃣ DataContext.cs

Presentation Layer

A camada de Apresentação é o ponto de entrada para o nosso sistema. Normalmente, você implementaria isso como um projeto de Web API.

A parte mais importante da camada de Apresentação são os Controladores, que definem os endpoints da API em nosso sistema.

📁 Presentation

|__ 📁 Controllers

|__ 📁 Middlewares

|__ 📁 ViewModels

|__ #️⃣ Program.cs 

Terminou por aqui?

Você não precisa seguir a estrutura de pastas que propus.

Clean Architecture é um pouco flexível, obviamente a regras estabelecidas onde você pode experimentá-la e estruturá-la da maneira que quiser.

Fontes:

Arquitetura limpa: O guia do artesão para estrutura e design de software

Clean Arhitecture, Macoratti

Compartilhe
Comentários (2)

MS

Maria Sacramento - 06/11/2022 09:06

Achei muito avançado os cursos!; ótimo!

Cleide Lourenço
Cleide Lourenço - 05/11/2022 13:02

Massa!