NetArch.Template
1.0.1
dotnet new install NetArch.Template::1.0.1
NetArch.Template
Visão Geral
NetArch.Template é uma solução de arquitetura modular baseada nos princípios de Clean Architecture, Domain-Driven Design (DDD), CQRS e SOLID. Este template proporciona uma separação clara de responsabilidades entre domínio, aplicação, infraestrutura, persistência, canais de apresentação e ambientes de execução.
Testes Arquiteturais
A solução inclui o projeto NetArch.Template.ArchTests
que utiliza o ArchUnitNET para validar automaticamente a conformidade da arquitetura, garantindo que as dependências entre camadas estejam de acordo com as regras definidas.
Estrutura da Arquitetura
A solução segue uma abordagem estruturada em camadas:
NetArch.Template/
├── src/
│ ├── Core/
│ │ ├── NetArch.Template.Domain.Shared/
│ │ ├── NetArch.Template.Domain/
│ │ ├── NetArch.Template.Application.Contracts/
│ │ ├── NetArch.Template.Application.Abstractions/
│ │ └── NetArch.Template.Application/
│
│ ├── Infrastructure/
│ │ └── NetArch.Template.Infrastructure/
│
│ ├── Persistence/
│ │ ├── NetArch.Template.Persistence.EntityFrameworkCore/
│ │ └── NetArch.Template.Persistence.DataAccess/
│
│ ├── Presentation/
│ │ └── NetArch.Template.HttpApi/
│
│ ├── Hosts/
│ │ └── NetArch.Template.HttpApi.Public/
│
│ └── Tools/
│ └── NetArch.Template.DbMigrator/
│
├── tests/
│ ├── NetArch.Template.TestBase/
│ ├── NetArch.Template.UnitTests/
│ ├── NetArch.Template.IntegrationTests/
│ └── NetArch.Template.ArchTests/
Dependências entre Projetos
- NetArch.Template.Domain.Shared: Base comum, não depende de outros projetos.
- NetArch.Template.Domain: Depende de Domain.Shared.
- NetArch.Template.Application.Contracts: Depende de Domain.Shared.
- NetArch.Template.Application.Abstractions: Depende de Domain.Shared (e opcionalmente de Domain).
- NetArch.Template.Application: Depende de Domain, Domain.Shared, Application.Contracts, Application.Abstractions.
- NetArch.Template.Infrastructure: Depende de Application.Contracts, Application.Abstractions, Domain, Domain.Shared.
- NetArch.Template.Persistence.EntityFrameworkCore: Depende de Domain, Domain.Shared.
- NetArch.Template.Persistence.DataAccess: Depende de Domain, Domain.Shared, Application.Contracts.
- NetArch.Template.HttpApi: Depende de Application, Application.Contracts, Application.Abstractions.
- NetArch.Template.HttpApi.Public: Depende de HttpApi, Infrastructure, Persistence.
Essa estrutura garante o fluxo de dependências de fora para dentro, respeitando os princípios da Clean Architecture e reduzindo o acoplamento entre camadas.
Descrição das Camadas
Core
- Domain.Shared: Elementos base comuns incluindo enums, objetos de valor, exceções e constantes utilizados em toda a solução.
- Domain: Contém entidades, agregados, interfaces de repositório e contratos de negócio.
- Application.Contracts: Define comandos, queries, DTOs e contratos de integração externos.
- Application.Abstractions: Interfaces técnicas utilizadas pela aplicação (ex: cache, email, mensageria).
- Application: Implementação dos casos de uso, serviços de orquestração e regras de aplicação.
Infrastructure
- Infrastructure: Implementações concretas das interfaces técnicas definidas em Application.Abstractions, como Redis, RabbitMQ, SMTP, S3, etc.
Persistence
- Persistence.EntityFrameworkCore: Implementações de repositórios e DbContext usando EF Core.
- Persistence.DataAccess: Acesso a procedures, views e queries diretas para consultas simples sem lógica de negócio, podendo retornar DTOs projetados diretamente para a camada de aplicação.
Presentation
- HttpApi: Controllers REST, filtros, middlewares, validadores e métodos de extensão para registrar serviços da aplicação.
Hosts
- HttpApi.Public: Ponto de entrada REST público que configura o pipeline do ASP.NET Core.
Tools
- DbMigrator: Ferramenta para execução de migrações e scripts de banco de dados via linha de comando.
Tests
- TestBase: Builders, fixtures e mocks reutilizáveis.
- UnitTests: Testes de unidade das camadas Domain e Application.
- IntegrationTests: Testes de integração com banco real, APIs ou serviços externos simulados.
- ArchTests: Testes de arquitetura utilizando ArchUnitNET para garantir a conformidade com as regras arquiteturais definidas.
Princípios Arquiteturais
A estrutura foi definida considerando os seguintes princípios:
- Modularidade: Cada camada possui responsabilidade única e bem definida.
- Baixo Acoplamento: Separação entre Domínio, Aplicação, Infraestrutura e Hosts garante independência e flexibilidade.
- Facilidade de Testes: Definição clara de interfaces permite substituir dependências reais por mocks.
- Expansão Horizontal: Camada de apresentação aceita múltiplos canais (REST, gRPC).
- Escalabilidade: Suporte nativo a APIs, Workers, Processadores e ferramentas.
Executando Migrações
Use a ferramenta DbMigrator para aplicar as migrações:
cd src/Tools/NetArch.Template.DbMigrator
dotnet run
Gerenciando Segredos
Para ambientes de desenvolvimento, utilize o Secret Manager do Visual Studio para armazenar informações sensíveis.
No Visual Studio, clique com o botão direito nos projetos NetArch.Template.HttpApi.Public
ou NetArch.Template.DbMigrator
e selecione "Manage User Secrets" para configurar informações sensíveis como strings de conexão.
Criar as pastas necessárias
mkdir -p templates/NetArch.Template/.template.config
Copiar os arquivos, excluindo o que não precisa
Get-ChildItem -Path . -Exclude bin,obj,.vs,templates,.ideia | Copy-Item -Destination templates/NetArch.Template/ -Recurse -Force
dotnet new install .
dotnet new netarch -n MinhaEmpresa.MeuProduto
dotnet new uninstall .
Para criar um projeto Oracle
dotnet new netarch-oracle -n MeuProjeto.Oracle
Para criar um projeto PostgreSQL
dotnet new netarch-postgres -n MeuProjeto.Postgres
dotnet pack NetArch.Template.csproj -c Release
dotnet nuget push bin\Release\NetArch.Template.1.0.0.nupkg --api-key SUA_API_KEY --source https://api.nuget.org/v3/index.json
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.