Help us improve
Share bugs, ideas, or general feedback.
From acc
Generates PHP 8.4 application use cases that orchestrate domain objects, manage transactions, dispatch events, create DTOs, and include unit tests. For DDD-style backends.
npx claudepluginhub dykyi-roman/awesome-claude-code --plugin accHow this skill is triggered — by the user, by Claude, or both
Slash command
/acc:create-use-caseThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate Application-layer Use Cases that orchestrate domain operations.
Generates DDD-compliant aggregates for PHP 8.4 with root entity, child entities, domain events, invariant protection, and unit tests.
Implements Clean Architecture, Hexagonal (Ports & Adapters), and Domain-Driven Design patterns in PHP 8.3+ with Symfony 7.x. For enterprise app architecture, legacy refactoring, DDD, and testable backends.
Translates domain rules into code using entities, value objects, aggregates, repositories, and domain events with explicit invariants.
Share bugs, ideas, or general feedback.
Generate Application-layer Use Cases that orchestrate domain operations.
| Scenario | Example |
|---|---|
| Create operation | CreateOrderUseCase |
| State transition | ConfirmOrderUseCase |
| External service integration | ProcessPaymentUseCase |
| Multi-step workflow | CheckoutUseCase |
Path: src/Application/{BoundedContext}/UseCase/
{Name}UseCase.php — Main orchestration classPath: src/Application/{BoundedContext}/DTO/
{Name}Input.php — Input data containerPath: src/Application/{BoundedContext}/DTO/
{Name}Output.php — Result data containerPath: tests/Unit/Application/{BoundedContext}/UseCase/
| Component | Path |
|---|---|
| Use Case | src/Application/{BoundedContext}/UseCase/ |
| Input DTO | src/Application/{BoundedContext}/DTO/ |
| Output DTO | src/Application/{BoundedContext}/DTO/ |
| Unit Tests | tests/Unit/Application/{BoundedContext}/UseCase/ |
| Pattern | Example |
|---|---|
| Use Case | {Verb}{Entity}UseCase |
| Input DTO | {Name}Input |
| Output DTO | {Name}Output or {Entity}{Result}Output |
final readonly class {Name}UseCase
{
public function __construct(
private {Repository}Interface $repository,
private EventDispatcherInterface $events,
private TransactionManagerInterface $transaction
) {}
public function execute({Name}Input $input): {Name}Output
{
return $this->transaction->transactional(function () use ($input) {
$aggregate = $this->repository->findById($input->id);
$aggregate->doSomething($input->data);
$this->repository->save($aggregate);
foreach ($aggregate->releaseEvents() as $event) {
$this->events->dispatch($event);
}
return new {Name}Output(...);
});
}
}
final readonly class {Name}Input
{
public function __construct(
public {ValueObject} $id,
{additionalProperties}
) {}
}
final readonly class {Name}Output
{
public function __construct(
public string $id,
{resultProperties}
) {}
public function toArray(): array
{
return ['id' => $this->id, ...];
}
}
| Anti-pattern | Problem | Solution |
|---|---|---|
| Business Logic | Decisions in use case | Delegate to domain |
| Multiple Aggregates | Transaction spans aggregates | One aggregate per transaction |
| Direct Repo Calls | Bypassing use case | Always use use case |
| Missing Transaction | No atomicity | Wrap in transaction |
| External in Transaction | Long-running transactions | External calls outside |
For complete PHP templates and examples, see:
references/templates.md — UseCase, Input, Output, Test templates with design principlesreferences/examples.md — CreateOrder, ConfirmOrder, ProcessPayment examples and tests