Pular para o conteúdo principal

Estrutura do Projeto

Compreender a estrutura de projeto padrão no Vaden é fundamental para manter aplicações limpas e escaláveis. Abaixo está uma visão geral de como um projeto típico do Vaden é organizado.

meu_projeto_vaden/
├── bin/
│ └── server.dart # Ponto de entrada do servidor (arquivo principal)
├── lib/
│ ├── config/ # Arquivos de configuração da aplicação (ex: OpenAPI, configurações)
│ ├── src/ # Código real da aplicação (controladores, serviços, etc)
│ └── vaden_application.dart # Arquivo gerado pelo vaden_class_scanner
├── application.yaml # Configuração do Vaden
├── pubspec.yaml # Gerenciador de dependências do projeto
└── build.yaml # Configuração do build_runner

bin/server.dart

Este é o ponto de entrada principal da sua aplicação. Ele carrega o vaden_application.dart gerado e inicia o servidor HTTP:

import 'package:my_vaden_project/vaden_application.dart';
import 'package:shelf/shelf_io.dart';

void main() async {
final app = await createApplication();
await serve(app.handler, 'localhost', 8080);
}

lib/vaden_application.dart

Este arquivo é gerado automaticamente pelo vaden_class_scanner. Ele escaneia todas as anotações (@Controller, @Service, @Bean, etc.) e compõe a instância completa da aplicação com roteamento, injeção de dependência e configuração de middleware. Você não deve editar este arquivo manualmente.

lib/config/

Esta pasta contém arquivos e classes de configuração. Por exemplo:

  • openapi.dart – declara a estrutura da OpenAPI.
  • app_config.dart – fornece beans usando @Configuration() e @Bean().
  • settings.dart – carrega e representa configurações da aplicação a partir de YAML.

lib/src/

Aqui é onde reside a lógica de negócio real. É onde você define:

  • controllers/ – manipuladores de rotas usando @Controller.
  • services/ – serviços injetáveis usando @Service.
  • repositories/ – lógica de persistência usando @Repository.
  • dtos/ – estruturas de dados e DTOs usando @DTO.
  • middlewares/ – interceptadores de requisição usando Middleware.
  • guards/ – verificações de autorização usando Guard.

Você tem liberdade para organizar esta pasta de qualquer forma que se adeque à sua arquitetura.

application.yaml

Este arquivo opcional pode ser colocado na raiz do seu projeto e é usado para configurar configurações globais do Vaden. Funciona de forma semelhante a arquivos .env em outros frameworks, mas com sintaxe YAML.

Uso típico inclui:

  • Declarar porta e host do servidor
  • Definir provedor de armazenamento (local, s3, firebase)
  • Configurar acesso ao banco de dados
  • Fornecer metadados da OpenAPI

Exemplo:

server:
port: 8080
host: localhost

database:
provider: postgres
postgres:
host: localhost
port: 5432
database: my_app
username: user
password: pass

openapi:
title: My API
version: 1.0.0
description: Auto-generated by Vaden

Os valores em application.yaml são automaticamente carregados em ApplicationSettings, que pode ser injetado usando @Bean() para serviços baseados em configuração.