Pular para conteúdo

Visao Geral da Arquitetura

O TepConfina segue uma arquitetura distribuida com tres aplicacoes independentes (backend, frontend e mobile) que se comunicam via API REST. O backend adota Clean Architecture, garantindo separacao de responsabilidades e testabilidade.


Diagrama de Contexto (C4 - Nivel 1)

C4Context
    title Diagrama de Contexto - TepConfina

    Person(user, "Usuario", "Gestor de confinamento, veterinario ou administrador")
    Person(producer, "Produtor", "Proprietario dos animais confinados")

    System(tepconfina, "TepConfina", "Plataforma SaaS de gestao de confinamento bovino")

    System_Ext(firebase, "Firebase", "Push notifications")
    System_Ext(aws, "AWS", "Hospedagem e infraestrutura")

    Rel(user, tepconfina, "Gerencia lotes, animais, pesagens, racoes")
    Rel(producer, tepconfina, "Consulta relatorios e KPIs")
    Rel(tepconfina, firebase, "Envia notificacoes push")
    Rel(tepconfina, aws, "Hospedado em ECS Fargate")

Arquitetura de Aplicacoes

graph TB
    subgraph Cliente
        WEB[Frontend React 18<br/>Vite 5 + TypeScript]
        MOB[Mobile Flutter 3<br/>Riverpod + Hive]
    end

    subgraph Backend
        API[API .NET 10<br/>Controllers + Middleware]
        APP[Application<br/>Services + DTOs]
        DOM[Domain<br/>Entities + Interfaces]
        INF[Infrastructure<br/>EF Core + Redis]
    end

    subgraph Dados
        PG[(PostgreSQL 15)]
        RD[(Redis 7)]
    end

    WEB -->|HTTPS/REST| API
    MOB -->|HTTPS/REST| API
    API --> APP
    APP --> DOM
    APP --> INF
    INF --> PG
    INF --> RD

    style DOM fill:#1B3A5C,color:#fff
    style APP fill:#2E7D32,color:#fff
    style INF fill:#E65100,color:#fff
    style API fill:#0277BD,color:#fff

Clean Architecture

O backend e organizado em quatro camadas concentricas. A regra de dependencia determina que camadas externas podem depender das internas, mas nunca o contrario.

graph TB
    subgraph "Camada 4 - API"
        C[Controllers]
        MW[Middleware]
        PROG[Program.cs]
    end

    subgraph "Camada 3 - Infrastructure"
        DB[DbContext / EF Core]
        REPO[Repositories]
        CACHE[Redis Cache]
    end

    subgraph "Camada 2 - Application"
        SVC[Services]
        DTO[DTOs]
        VAL[Validators]
        IFACE_APP[Interfaces]
    end

    subgraph "Camada 1 - Domain"
        ENT[Entities]
        ENUM[Enums]
        IFACE_DOM[Interfaces]
    end

    C --> SVC
    SVC --> ENT
    SVC --> IFACE_APP
    REPO -.->|implementa| IFACE_DOM
    DB --> ENT

    style ENT fill:#1B3A5C,color:#fff
    style ENUM fill:#1B3A5C,color:#fff
    style IFACE_DOM fill:#1B3A5C,color:#fff
Camada Projeto Responsabilidade
Domain TepConfina.Domain Entidades, enums, interfaces de repositorio
Application TepConfina.Application Servicos de negocio, DTOs, validadores, interfaces
Infrastructure TepConfina.Infrastructure EF Core, repositorios, cache Redis, integracao
API TepConfina.API Controllers, middleware, configuracao, DI

Regra de Dependencia

A camada Domain nao referencia nenhuma outra camada. Ela define interfaces que sao implementadas pela Infrastructure. A inversao de dependencia (DIP) e aplicada via injecao de dependencia no Program.cs.


Estrutura de Repositorios

O projeto esta dividido em tres repositorios independentes para permitir CI/CD isolado e escalabilidade de equipe.

Repositorio Conteudo CI/CD
tepconfina-api Backend .NET + Terraform GitHub Actions → AWS ECS
tepconfina-web Frontend React + Vite GitHub Actions → S3/CloudFront
tepconfina-mobile App Flutter GitHub Actions → App Store/Play Store

Padroes de Design

Padrao Aplicacao no TepConfina
Repository Pattern Repository<T> generico + repositorios especializados
CQRS-lite Separacao de queries e commands nos services
Soft Delete IsDeleted + global query filter no EF Core
Multi-tenancy Coluna TenantId em todas as entidades + filtro global
DTO Mapping Mapeamento manual com calculo de KPIs nos DTOs de resposta
Refresh Token JWT de curta duracao + refresh token para renovacao silenciosa
Offline Queue Fila de mutacoes no mobile, sincronizada ao reconectar

Por que CQRS-lite?

Em vez de implementar CQRS completo com event sourcing e filas de mensagens, o TepConfina adota uma versao simplificada: os services possuem metodos separados para leitura (Get, List) e escrita (Create, Update, Delete), mantendo a simplicidade sem overhead de infraestrutura.


Proximas paginas: Backend | Frontend | Mobile | Decisoes Tecnicas