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.
How 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.
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 testsnpx claudepluginhub dykyi-roman/awesome-claude-code --plugin accGenerates 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.