📐 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