hugo0vaz / ddd-tooling
Geradores de boilerplate DDD (Aggregate, Value Object, Domain Event, Repository, Integration Events) para Laravel.
Requires
- php: ^8.3
- illuminate/console: ^13.0
- illuminate/filesystem: ^13.0
- illuminate/support: ^13.0
Requires (Dev)
- laravel/pint: ^1.27
- mockery/mockery: ^1.6
- orchestra/testbench: ^11.0
- phpunit/phpunit: ^12.0
README
Geradores de boilerplate DDD (Domain-Driven Design) para Laravel — Aggregate Roots, Value Objects, Domain Events, Repositories e Integration Events.
Projeto para acelerar a criação de bounded contexts seguindo uma arquitetura DDD pragmática: contexto na raiz, quatro camadas (Domain, Application, Infrastructure, Http) e SharedKernel compartilhado.
Instalação
composer require hugo0vaz/ddd-tooling
O ServiceProvider é auto-descoberto pelo Laravel (via extra.laravel.providers).
Configuração
Publish da config (opcional — os defaults funcionam para apps com namespace App\):
php artisan vendor:publish --tag=ddd-tooling-config
Chaves de config/ddd-tooling.php:
| Chave | Default | Descrição |
|---|---|---|
kernel_namespace |
App\SharedKernel |
Namespace do SharedKernel da app (referenciado pelos stubs gerados) |
kernel_path |
app_path('SharedKernel') |
Path físico do SharedKernel |
schemas_path |
base_path('contracts/schemas') |
Diretório dos schemas JSON de contrato |
contracts_namespace |
{kernel_namespace}\Infrastructure\Contracts |
Namespace do subsystem de contratos |
contracts_path |
{kernel_path}/Infrastructure/Contracts |
Path físico do subsystem de contratos |
Comandos de geração
| Comando | Descrição |
|---|---|
ddd:context <context> |
Cria o scaffolding de camadas de um bounded context |
ddd:aggregate <context> <name> |
Aggregate Root + Value Object de identidade |
ddd:value-object <name> |
Value Object (no contexto, agregado ou SharedKernel) |
ddd:domain-event <context> <aggregate> <event> |
Domain Event (+ listener opcional) |
ddd:repository <context> <aggregate> |
Interface de repositório (+ implementação Eloquent opcional) |
ddd:integration-event <context> <type> |
Schema JSON + IntegrationMapper (produtor) ou Subscriber (consumidor) |
ddd:integration-dto <context> <type> |
DTO tipado a partir de um schema de contrato |
Todos os comandos suportam --force para sobrescrever arquivos existentes.
Subsystem de contratos
O pacote inclui um subsystem coeso de validação de contratos (SchemaRepository, SchemaValidator, ContractCompatibility, CheckContractsCommand). Para publicá-lo na sua aplicação:
php artisan ddd:publish-contracts
Isso cria:
contracts/README.mdcontracts/schemas/.gitkeep- Quatro classes de contrato no diretório configurado (
contracts_path):
| Classe | Descrição |
|---|---|
SchemaRepository |
Carrega schemas JSON de contracts/schemas/ |
SchemaValidator |
Valida payloads contra um schema |
ContractCompatibility |
Detecta mudanças quebra-contrato entre versões |
CheckContractsCommand |
Comando contracts:check para CI |
As classes são publicadas com o namespace configurado (contracts_namespace) e o comando contracts:check é registrado automaticamente.
Override de stubs
Para customizar os stubs de geração:
php artisan vendor:publish --tag=ddd-tooling-stubs
Os stubs são copiados para stubs/ddd-tooling/. A cópia publicada sobrepõe a do pacote.
Testes
composer test