NetArch.Template 1.0.1

dotnet new install NetArch.Template::1.0.1
                    
This package contains a .NET Template Package you can call from the shell/command line.

Quality Gate Status Bugs

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.

Diagrama de Arquitetura

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

Diagrama Expandido

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:

  1. Modularidade: Cada camada possui responsabilidade única e bem definida.
  2. Baixo Acoplamento: Separação entre Domínio, Aplicação, Infraestrutura e Hosts garante independência e flexibilidade.
  3. Facilidade de Testes: Definição clara de interfaces permite substituir dependências reais por mocks.
  4. Expansão Horizontal: Camada de apresentação aceita múltiplos canais (REST, gRPC).
  5. 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.

Version Downloads Last Updated
1.0.1 165 4/1/2025
1.0.0 175 4/1/2025