A abordagem desse template segue os princípios de Clean Architecture, DDD (Domain-Driven Design) e práticas modernas de desenvolvimento de software.
A solução é organizada em múltiplos projetos que seguem a separação de responsabilidades, promovendo modularidade e facilidade de manutenção.
├── NetMicroserviceTemplate.API
│ ├── Endpoints
│ ├── Extensions
│ ├── Middlewares
│ ├── Properties
├── NetMicroserviceTemplate.Application
│ ├── Contracts
│ ├── Exceptions
│ ├── Extensions
├── NetMicroserviceTemplate.Domain
│ ├── Aggregates
│ ├── Contracts
│ │ └── Repositories
│ ├── Entities
│ ├── Events
│ ├── Exceptions
│ ├── Extensions
│ ├── Services
│ ├── ValueObjects
├── NetMicroserviceTemplate.Infrastructure.Data
│ ├── Context
│ ├── EntityConfigurations
│ ├── Extensions
│ ├── Repositories
├── NetMicroserviceTemplate.Tests
│ ├── IntegrationTests
│ ├── Mocks
│ ├── UnitTests
└── NetMicroserviceTemplate.sln
Projeto principal que expõe endpoints RESTful.
- Endpoints: Contém os controladores da API responsáveis por receber as requisições HTTP e encaminhá-las para os use cases.
- Middlewares: Implementações de middlewares para manipulação de solicitações HTTP (ex.: tratamento de erros, autenticação).
Camada de aplicação que contém a lógica de orquestração dos casos de uso.
- Contracts: Interfaces para serviços externos ou dependências, facilitando a injeção de dependências.
Camada de domínio, contendo as regras de negócios principais e modelos.
- Aggregates: Raízes de agregados que agrupam entidades relacionadas com regras de consistência.
- Contracts: Interfaces que definem contratos para repositórios e serviços do domínio.
- Entities: Definições de entidades de negócio que representam o núcleo do domínio.
- Events: Eventos de domínio
- Services: Serviços de domínio que encapsulam lógica complexa que não se encaixa diretamente em uma entidade.
- ValueObjects: Objetos de valor que representam conceitos imutáveis e sem identidade única.
Camada que implementa a persistência de dados.
- EntityConfigurations: Configurações de mapeamento do Entity Framework Core.
- Repositories: Implementações dos repositórios que interagem com o banco de dados.
Projeto de testes automatizados para garantir a qualidade do código.
- UnitTests: Testes unitários focados em métodos individuais das classes.
- IntegrationTests: Testes de integração para verificar a interação entre diferentes componentes do sistema.
- Mocks: Implementações simuladas de dependências para facilitar os testes.
- NetMicroserviceTemplate.API depende de NetMicroserviceTemplate.Application e NetMicroserviceTemplate.Infrastructure.
- NetMicroserviceTemplate.Application depende de NetMicroserviceTemplate.Domain.
- NetMicroserviceTemplate.Infrastructure depende de NetMicroserviceTemplate.Domain e NetMicroserviceTemplate.Application para implementar repositórios e serviços.
Separa a lógica de negócios do código de infraestrutura e apresentação, promovendo independência entre as camadas.
Define as entidades, agregados, serviços de domínio e interfaces de repositório com base no modelo do domínio.
Garante que as funcionalidades do microserviço funcionem conforme esperado, minimizando a introdução de bugs em futuras alterações.
Essa estrutura modular proporciona uma base sólida para a construção de microserviços escaláveis, testáveis e de fácil manutenção.
- Mantenha a separação de responsabilidades clara entre as camadas.
- Use DTOs para a comunicação entre a API e a aplicação para proteger a camada de domínio.
- Certifique-se de que os testes cubram tanto a lógica de negócio (unitários) quanto a integração entre serviços (de integração).