Pular para conteúdo

📐 Camadas - ecosif-angular

📋 Visão Geral

Este documento detalha a arquitetura em camadas do ecosif-angular, explicando responsabilidades e interações entre as camadas.


🏗️ Camadas da Aplicação

1. Camada de Apresentação (Presentation Layer)

Responsabilidades

  • ✅ Renderização da interface do usuário
  • ✅ Captura de interações do usuário
  • ✅ Validação de formulários (template-driven e reactive)
  • ✅ Exibição de dados formatados

Componentes

src/app/
├── pages/                    # ~87 componentes de páginas
│   ├── login/
│   ├── dashboard/
│   ├── companydetails/
│   └── ...
├── views/                    # Views lazy-loaded
│   ├── dashboard/
│   ├── base/
│   └── notifications/
├── containers/               # Layout containers
│   └── default-layout/
└── shared/components/        # Componentes reutilizáveis

Padrões

  • Smart/Dumb Components - Separação de lógica e apresentação
  • Component Communication - @Input/@Output, Services
  • Change Detection - OnPush onde possível

2. Camada de Aplicação (Application Layer)

Responsabilidades

  • ✅ Lógica de negócio da aplicação
  • ✅ Comunicação HTTP com backends
  • ✅ Transformação de dados (DTO ↔ Model)
  • ✅ Gerenciamento de estado
  • ✅ Validações de negócio

Services

src/app/service/
├── auth.service.ts           # Autenticação
├── company.service.ts        # Empresas
├── chartofaccount.service.ts # Planos de contas
├── entries.service.ts        # Lançamentos
├── balanceinquiry.service.ts # Consultas
├── relatorios.service.ts     # Relatórios
└── ... (41 services)

Padrões

  • Injectable Root - providedIn: 'root'
  • Observable-based - RxJS para assíncrono
  • Error Handling - Try/catch + error callbacks

3. Camada de Infraestrutura (Infrastructure Layer)

Responsabilidades

  • ✅ Configuração da aplicação
  • ✅ Interceptação de requisições HTTP
  • ✅ Proteção de rotas
  • ✅ Gerenciamento de erros globais
  • ✅ Logging e monitoramento

Componentes

src/app/
├── core/
│   ├── config/               # AppConfigService
│   ├── services/             # Core services
│   └── validators/           # Validadores customizados
├── guard/
│   └── auth.guard.ts         # Route guard
├── interceptor/
│   └── auth.interceptor.ts   # HTTP interceptor
└── custom_exception/         # Exception handling

4. Camada de Dados (Data Layer)

Responsabilidades

  • ✅ Definição de modelos/interfaces
  • ✅ Tipagem TypeScript
  • ✅ Validação de estruturas de dados

Models

src/app/model/
├── user.ts
├── company.detail.ts
├── chartofaccount.ts
├── entries.ts
└── ... (27 models)

🔄 Fluxo de Dados entre Camadas

Exemplo: Buscar Empresas

┌─────────────────────────────────────────┐
│  1. Presentation Layer                  │
│     CompanydetailsComponent             │
│     • ngOnInit()                        │
│     • Template chama service            │
└──────────────────┬──────────────────────┘
                   │
                   │ this.companyService.getCompanies()
                   ▼
┌─────────────────────────────────────────┐
│  2. Application Layer                   │
│     CompanyService                      │
│     • getCompanies(): Observable        │
│     • Faz requisição HTTP               │
└──────────────────┬──────────────────────┘
                   │
                   │ this.http.get<Company[]>(url)
                   ▼
┌─────────────────────────────────────────┐
│  3. Infrastructure Layer                │
│     AuthInterceptor                     │
│     • Adiciona token JWT                │
│     • Adiciona headers                  │
└──────────────────┬──────────────────────┘
                   │
                   │ HTTP Request
                   ▼
┌─────────────────────────────────────────┐
│  4. Backend Service                     │
│     ecosif-masterdata                   │
│     • Processa requisição               │
│     • Retorna dados                     │
└──────────────────┬──────────────────────┘
                   │
                   │ HTTP Response
                   ▼
┌─────────────────────────────────────────┐
│  3. Infrastructure Layer (retorno)      │
│     • Interceptor processa response     │
│     • Error handling se necessário      │
└──────────────────┬──────────────────────┘
                   │
                   │ Observable<Company[]>
                   ▼
┌─────────────────────────────────────────┐
│  2. Application Layer (retorno)         │
│     CompanyService                      │
│     • Transforma dados se necessário    │
│     • Retorna Observable                │
└──────────────────┬──────────────────────┘
                   │
                   │ Observable<Company[]>
                   ▼
┌─────────────────────────────────────────┐
│  1. Presentation Layer (retorno)        │
│     CompanydetailsComponent             │
│     • Atualiza propriedades             │
│     • UI atualiza via bindings          │
└─────────────────────────────────────────┘

🎯 Princípios de Separação

Single Responsibility

Cada camada tem uma responsabilidade única:

  • Presentation: UI e interação
  • Application: Lógica de negócio
  • Infrastructure: Configuração e infraestrutura
  • Data: Estruturas de dados

Dependency Inversion

Camadas superiores dependem de abstrações:

// Component depende de Service (abstração)
constructor(private service: CompanyService) {}

// Service depende de HttpClient (abstração)
constructor(private http: HttpClient) {}

📊 Resumo de Camadas

Camada Arquivos Responsabilidade Principal
Presentation ~200 componentes UI e interação
Application 41 services Lógica de negócio
Infrastructure Core + Guards + Interceptors Configuração e infraestrutura
Data 27 models Estruturas de dados

Última Atualização: 2025-12-01