Skip to content
Back to skills

Acc Create Use Case

ASecurity

Generates Application Use Cases for PHP 8.5. Creates orchestration services that coordinate domain objects, handle transactions, and dispatch events. Includes unit tests.

  • 666 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 2, 2026
ai-agentsphp

Works with

  • cli

Security analysis

A100/100

Scanned September 2, 2026

npx -y skills add majiayu000/claude-skill-registry --skill acc-create-use-case --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Acc Create Use Case?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Acc Create Use Case
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-acc-create-use-case-claude-skill-registry/badge)](https://www.skillsdirectory.com/skills/majiayu000-acc-create-use-case-claude-skill-registry)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: acc-create-use-case
description: Generates Application Use Cases for PHP 8.5. Creates orchestration services that coordinate domain objects, handle transactions, and dispatch events. Includes unit tests.
---

# Use Case Generator

Generate Application-layer Use Cases that orchestrate domain operations.

## Use Case Characteristics

- **Single responsibility**: One operation per use case
- **Orchestration**: Coordinates domain objects
- **Transaction boundary**: Manages atomicity
- **Event dispatch**: Publishes domain events
- **No business logic**: Delegates to domain
- **Framework agnostic**: No HTTP/CLI concerns

## When to Use

| Scenario | Example |
|----------|---------|
| Create operation | `CreateOrderUseCase` |
| State transition | `ConfirmOrderUseCase` |
| External service integration | `ProcessPaymentUseCase` |
| Multi-step workflow | `CheckoutUseCase` |

---

## Generation Process

### Step 1: Generate Use Case

**Path:** `src/Application/{BoundedContext}/UseCase/`

1. `{Name}UseCase.php` — Main orchestration class

### Step 2: Generate Input DTO

**Path:** `src/Application/{BoundedContext}/DTO/`

1. `{Name}Input.php` — Input data container

### Step 3: Generate Output DTO

**Path:** `src/Application/{BoundedContext}/DTO/`

1. `{Name}Output.php` — Result data container

### Step 4: Generate Tests

**Path:** `tests/Unit/Application/{BoundedContext}/UseCase/`

---

## File Placement

| 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/` |

---

## Naming Conventions

| Pattern | Example |
|---------|---------|
| Use Case | `{Verb}{Entity}UseCase` |
| Input DTO | `{Name}Input` |
| Output DTO | `{Name}Output` or `{Entity}{Result}Output` |

---

## Quick Template Reference

### Use Case

```php
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(...);
        });
    }
}
```

### Input DTO

```php
final readonly class {Name}Input
{
    public function __construct(
        public {ValueObject} $id,
        {additionalProperties}
    ) {}
}
```

### Output DTO

```php
final readonly class {Name}Output
{
    public function __construct(
        public string $id,
        {resultProperties}
    ) {}

    public function toArray(): array
    {
        return ['id' => $this->id, ...];
    }
}
```

---

## Anti-patterns to Avoid

| 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 |

---

## References

For complete PHP templates and examples, see:
- `references/templates.md` — UseCase, Input, Output, Test templates with design principles
- `references/examples.md` — CreateOrder, ConfirmOrder, ProcessPayment examples and tests

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.